//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_spi(SotoInternal) import SotoCore

extension MediaLive {
    // MARK: Enums

    public enum AacCodingMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case adReceiverMix = "AD_RECEIVER_MIX"
        case codingMode10 = "CODING_MODE_1_0"
        case codingMode11 = "CODING_MODE_1_1"
        case codingMode20 = "CODING_MODE_2_0"
        case codingMode51 = "CODING_MODE_5_1"
        public var description: String { return self.rawValue }
    }

    public enum AacInputType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case broadcasterMixedAd = "BROADCASTER_MIXED_AD"
        case normal = "NORMAL"
        public var description: String { return self.rawValue }
    }

    public enum AacProfile: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case hev1 = "HEV1"
        case hev2 = "HEV2"
        case lc = "LC"
        public var description: String { return self.rawValue }
    }

    public enum AacRateControlMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case cbr = "CBR"
        case vbr = "VBR"
        public var description: String { return self.rawValue }
    }

    public enum AacRawFormat: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case latmLoas = "LATM_LOAS"
        case none = "NONE"
        public var description: String { return self.rawValue }
    }

    public enum AacSpec: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case mpeg2 = "MPEG2"
        case mpeg4 = "MPEG4"
        public var description: String { return self.rawValue }
    }

    public enum AacVbrQuality: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case high = "HIGH"
        case low = "LOW"
        case mediumHigh = "MEDIUM_HIGH"
        case mediumLow = "MEDIUM_LOW"
        public var description: String { return self.rawValue }
    }

    public enum Ac3AttenuationControl: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case attenuate3Db = "ATTENUATE_3_DB"
        case none = "NONE"
        public var description: String { return self.rawValue }
    }

    public enum Ac3BitstreamMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case commentary = "COMMENTARY"
        case completeMain = "COMPLETE_MAIN"
        case dialogue = "DIALOGUE"
        case emergency = "EMERGENCY"
        case hearingImpaired = "HEARING_IMPAIRED"
        case musicAndEffects = "MUSIC_AND_EFFECTS"
        case visuallyImpaired = "VISUALLY_IMPAIRED"
        case voiceOver = "VOICE_OVER"
        public var description: String { return self.rawValue }
    }

    public enum Ac3CodingMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case codingMode10 = "CODING_MODE_1_0"
        case codingMode11 = "CODING_MODE_1_1"
        case codingMode20 = "CODING_MODE_2_0"
        case codingMode32Lfe = "CODING_MODE_3_2_LFE"
        public var description: String { return self.rawValue }
    }

    public enum Ac3DrcProfile: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case filmStandard = "FILM_STANDARD"
        case none = "NONE"
        public var description: String { return self.rawValue }
    }

    public enum Ac3LfeFilter: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum Ac3MetadataControl: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case followInput = "FOLLOW_INPUT"
        case useConfigured = "USE_CONFIGURED"
        public var description: String { return self.rawValue }
    }

    public enum AcceptHeader: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case imageJpeg = "image/jpeg"
        public var description: String { return self.rawValue }
    }

    public enum AccessibilityType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case doesNotImplementAccessibilityFeatures = "DOES_NOT_IMPLEMENT_ACCESSIBILITY_FEATURES"
        case implementsAccessibilityFeatures = "IMPLEMENTS_ACCESSIBILITY_FEATURES"
        public var description: String { return self.rawValue }
    }

    public enum AfdSignaling: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case auto = "AUTO"
        case fixed = "FIXED"
        case none = "NONE"
        public var description: String { return self.rawValue }
    }

    public enum Algorithm: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case aes128 = "AES128"
        case aes192 = "AES192"
        case aes256 = "AES256"
        public var description: String { return self.rawValue }
    }

    public enum AudioDescriptionAudioTypeControl: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case followInput = "FOLLOW_INPUT"
        case useConfigured = "USE_CONFIGURED"
        public var description: String { return self.rawValue }
    }

    public enum AudioDescriptionLanguageCodeControl: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case followInput = "FOLLOW_INPUT"
        case useConfigured = "USE_CONFIGURED"
        public var description: String { return self.rawValue }
    }

    public enum AudioLanguageSelectionPolicy: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case loose = "LOOSE"
        case strict = "STRICT"
        public var description: String { return self.rawValue }
    }

    public enum AudioNormalizationAlgorithm: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case itu17701 = "ITU_1770_1"
        case itu17702 = "ITU_1770_2"
        public var description: String { return self.rawValue }
    }

    public enum AudioNormalizationAlgorithmControl: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case correctAudio = "CORRECT_AUDIO"
        public var description: String { return self.rawValue }
    }

    public enum AudioOnlyHlsSegmentType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case aac = "AAC"
        case fmp4 = "FMP4"
        public var description: String { return self.rawValue }
    }

    public enum AudioOnlyHlsTrackType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case alternateAudioAutoSelect = "ALTERNATE_AUDIO_AUTO_SELECT"
        case alternateAudioAutoSelectDefault = "ALTERNATE_AUDIO_AUTO_SELECT_DEFAULT"
        case alternateAudioNotAutoSelect = "ALTERNATE_AUDIO_NOT_AUTO_SELECT"
        case audioOnlyVariantStream = "AUDIO_ONLY_VARIANT_STREAM"
        public var description: String { return self.rawValue }
    }

    public enum AudioType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case cleanEffects = "CLEAN_EFFECTS"
        case hearingImpaired = "HEARING_IMPAIRED"
        case undefined = "UNDEFINED"
        case visualImpairedCommentary = "VISUAL_IMPAIRED_COMMENTARY"
        public var description: String { return self.rawValue }
    }

    public enum AuthenticationScheme: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case akamai = "AKAMAI"
        case common = "COMMON"
        public var description: String { return self.rawValue }
    }

    public enum Av1GopSizeUnits: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case frames = "FRAMES"
        case seconds = "SECONDS"
        public var description: String { return self.rawValue }
    }

    public enum Av1Level: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case av1Level2 = "AV1_LEVEL_2"
        case av1Level21 = "AV1_LEVEL_2_1"
        case av1Level3 = "AV1_LEVEL_3"
        case av1Level31 = "AV1_LEVEL_3_1"
        case av1Level4 = "AV1_LEVEL_4"
        case av1Level41 = "AV1_LEVEL_4_1"
        case av1Level5 = "AV1_LEVEL_5"
        case av1Level51 = "AV1_LEVEL_5_1"
        case av1Level52 = "AV1_LEVEL_5_2"
        case av1Level53 = "AV1_LEVEL_5_3"
        case av1Level6 = "AV1_LEVEL_6"
        case av1Level61 = "AV1_LEVEL_6_1"
        case av1Level62 = "AV1_LEVEL_6_2"
        case av1Level63 = "AV1_LEVEL_6_3"
        case av1LevelAuto = "AV1_LEVEL_AUTO"
        public var description: String { return self.rawValue }
    }

    public enum Av1LookAheadRateControl: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case high = "HIGH"
        case low = "LOW"
        case medium = "MEDIUM"
        public var description: String { return self.rawValue }
    }

    public enum Av1RateControlMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case cbr = "CBR"
        case qvbr = "QVBR"
        public var description: String { return self.rawValue }
    }

    public enum Av1SceneChangeDetect: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum AvailBlankingState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum BandwidthReductionFilterStrength: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case auto = "AUTO"
        case strength1 = "STRENGTH_1"
        case strength2 = "STRENGTH_2"
        case strength3 = "STRENGTH_3"
        case strength4 = "STRENGTH_4"
        public var description: String { return self.rawValue }
    }

    public enum BandwidthReductionPostFilterSharpening: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case sharpening1 = "SHARPENING_1"
        case sharpening2 = "SHARPENING_2"
        case sharpening3 = "SHARPENING_3"
        public var description: String { return self.rawValue }
    }

    public enum BlackoutSlateNetworkEndBlackout: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum BlackoutSlateState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum BurnInAlignment: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case centered = "CENTERED"
        case left = "LEFT"
        case smart = "SMART"
        public var description: String { return self.rawValue }
    }

    public enum BurnInBackgroundColor: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case black = "BLACK"
        case none = "NONE"
        case white = "WHITE"
        public var description: String { return self.rawValue }
    }

    public enum BurnInDestinationSubtitleRows: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case rows16 = "ROWS_16"
        case rows20 = "ROWS_20"
        case rows24 = "ROWS_24"
        public var description: String { return self.rawValue }
    }

    public enum BurnInFontColor: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case black = "BLACK"
        case blue = "BLUE"
        case green = "GREEN"
        case red = "RED"
        case white = "WHITE"
        case yellow = "YELLOW"
        public var description: String { return self.rawValue }
    }

    public enum BurnInOutlineColor: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case black = "BLACK"
        case blue = "BLUE"
        case green = "GREEN"
        case red = "RED"
        case white = "WHITE"
        case yellow = "YELLOW"
        public var description: String { return self.rawValue }
    }

    public enum BurnInShadowColor: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case black = "BLACK"
        case none = "NONE"
        case white = "WHITE"
        public var description: String { return self.rawValue }
    }

    public enum BurnInTeletextGridControl: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case fixed = "FIXED"
        case scaled = "SCALED"
        public var description: String { return self.rawValue }
    }

    public enum CdiInputResolution: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case fhd = "FHD"
        case hd = "HD"
        case sd = "SD"
        case uhd = "UHD"
        public var description: String { return self.rawValue }
    }

    public enum ChannelClass: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case singlePipeline = "SINGLE_PIPELINE"
        case standard = "STANDARD"
        public var description: String { return self.rawValue }
    }

    public enum ChannelPipelineIdToRestart: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case pipeline0 = "PIPELINE_0"
        case pipeline1 = "PIPELINE_1"
        public var description: String { return self.rawValue }
    }

    public enum ChannelPlacementGroupState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case assigned = "ASSIGNED"
        case assigning = "ASSIGNING"
        case deleteFailed = "DELETE_FAILED"
        case deleted = "DELETED"
        case deleting = "DELETING"
        case unassigned = "UNASSIGNED"
        case unassigning = "UNASSIGNING"
        public var description: String { return self.rawValue }
    }

    public enum ChannelState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case createFailed = "CREATE_FAILED"
        case creating = "CREATING"
        case deleted = "DELETED"
        case deleting = "DELETING"
        case idle = "IDLE"
        case recovering = "RECOVERING"
        case running = "RUNNING"
        case starting = "STARTING"
        case stopping = "STOPPING"
        case updateFailed = "UPDATE_FAILED"
        case updating = "UPDATING"
        public var description: String { return self.rawValue }
    }

    public enum CloudWatchAlarmTemplateComparisonOperator: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case greaterThanOrEqualToThreshold = "GreaterThanOrEqualToThreshold"
        case greaterThanThreshold = "GreaterThanThreshold"
        case lessThanOrEqualToThreshold = "LessThanOrEqualToThreshold"
        case lessThanThreshold = "LessThanThreshold"
        public var description: String { return self.rawValue }
    }

    public enum CloudWatchAlarmTemplateStatistic: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case average = "Average"
        case maximum = "Maximum"
        case minimum = "Minimum"
        case sampleCount = "SampleCount"
        case sum = "Sum"
        public var description: String { return self.rawValue }
    }

    public enum CloudWatchAlarmTemplateTargetResourceType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case cloudfrontDistribution = "CLOUDFRONT_DISTRIBUTION"
        case mediaconnectFlow = "MEDIACONNECT_FLOW"
        case medialiveChannel = "MEDIALIVE_CHANNEL"
        case medialiveInputDevice = "MEDIALIVE_INPUT_DEVICE"
        case medialiveMultiplex = "MEDIALIVE_MULTIPLEX"
        case mediapackageChannel = "MEDIAPACKAGE_CHANNEL"
        case mediapackageOriginEndpoint = "MEDIAPACKAGE_ORIGIN_ENDPOINT"
        case mediatailorPlaybackConfiguration = "MEDIATAILOR_PLAYBACK_CONFIGURATION"
        case s3Bucket = "S3_BUCKET"
        public var description: String { return self.rawValue }
    }

    public enum CloudWatchAlarmTemplateTreatMissingData: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case breaching = "breaching"
        case ignore = "ignore"
        case missing = "missing"
        case notBreaching = "notBreaching"
        public var description: String { return self.rawValue }
    }

    public enum ClusterState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case active = "ACTIVE"
        case createFailed = "CREATE_FAILED"
        case creating = "CREATING"
        case deleteFailed = "DELETE_FAILED"
        case deleted = "DELETED"
        case deleting = "DELETING"
        public var description: String { return self.rawValue }
    }

    public enum ClusterType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case onPremises = "ON_PREMISES"
        public var description: String { return self.rawValue }
    }

    public enum CmafId3Behavior: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum CmafIngestSegmentLengthUnits: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case milliseconds = "MILLISECONDS"
        case seconds = "SECONDS"
        public var description: String { return self.rawValue }
    }

    public enum CmafKLVBehavior: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case noPassthrough = "NO_PASSTHROUGH"
        case passthrough = "PASSTHROUGH"
        public var description: String { return self.rawValue }
    }

    public enum CmafNielsenId3Behavior: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case noPassthrough = "NO_PASSTHROUGH"
        case passthrough = "PASSTHROUGH"
        public var description: String { return self.rawValue }
    }

    public enum CmafTimedMetadataId3Frame: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case none = "NONE"
        case priv = "PRIV"
        case tdrl = "TDRL"
        public var description: String { return self.rawValue }
    }

    public enum CmafTimedMetadataPassthrough: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum ColorSpace: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case hdr10 = "HDR10"
        case hlg2020 = "HLG_2020"
        case rec601 = "REC_601"
        case rec709 = "REC_709"
        public var description: String { return self.rawValue }
    }

    public enum ContentType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case imageJpeg = "image/jpeg"
        public var description: String { return self.rawValue }
    }

    public enum DashRoleAudio: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case alternate = "ALTERNATE"
        case commentary = "COMMENTARY"
        case description = "DESCRIPTION"
        case dub = "DUB"
        case emergency = "EMERGENCY"
        case enhancedAudioIntelligibility = "ENHANCED-AUDIO-INTELLIGIBILITY"
        case karaoke = "KARAOKE"
        case main = "MAIN"
        case supplementary = "SUPPLEMENTARY"
        public var description: String { return self.rawValue }
    }

    public enum DashRoleCaption: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case alternate = "ALTERNATE"
        case caption = "CAPTION"
        case commentary = "COMMENTARY"
        case description = "DESCRIPTION"
        case dub = "DUB"
        case easyreader = "EASYREADER"
        case emergency = "EMERGENCY"
        case forcedSubtitle = "FORCED-SUBTITLE"
        case karaoke = "KARAOKE"
        case main = "MAIN"
        case metadata = "METADATA"
        case subtitle = "SUBTITLE"
        case supplementary = "SUPPLEMENTARY"
        public var description: String { return self.rawValue }
    }

    public enum DeviceSettingsSyncState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case synced = "SYNCED"
        case syncing = "SYNCING"
        public var description: String { return self.rawValue }
    }

    public enum DeviceUpdateStatus: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case notUpToDate = "NOT_UP_TO_DATE"
        case upToDate = "UP_TO_DATE"
        case updating = "UPDATING"
        public var description: String { return self.rawValue }
    }

    public enum DolbyEProgramSelection: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case allChannels = "ALL_CHANNELS"
        case program1 = "PROGRAM_1"
        case program2 = "PROGRAM_2"
        case program3 = "PROGRAM_3"
        case program4 = "PROGRAM_4"
        case program5 = "PROGRAM_5"
        case program6 = "PROGRAM_6"
        case program7 = "PROGRAM_7"
        case program8 = "PROGRAM_8"
        public var description: String { return self.rawValue }
    }

    public enum DvbDashAccessibility: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case dvbdash1VisuallyImpaired = "DVBDASH_1_VISUALLY_IMPAIRED"
        case dvbdash2HardOfHearing = "DVBDASH_2_HARD_OF_HEARING"
        case dvbdash3SupplementalCommentary = "DVBDASH_3_SUPPLEMENTAL_COMMENTARY"
        case dvbdash4DirectorsCommentary = "DVBDASH_4_DIRECTORS_COMMENTARY"
        case dvbdash5EducationalNotes = "DVBDASH_5_EDUCATIONAL_NOTES"
        case dvbdash6MainProgram = "DVBDASH_6_MAIN_PROGRAM"
        case dvbdash7CleanFeed = "DVBDASH_7_CLEAN_FEED"
        public var description: String { return self.rawValue }
    }

    public enum DvbSdtOutputSdt: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case sdtFollow = "SDT_FOLLOW"
        case sdtFollowIfPresent = "SDT_FOLLOW_IF_PRESENT"
        case sdtManual = "SDT_MANUAL"
        case sdtNone = "SDT_NONE"
        public var description: String { return self.rawValue }
    }

    public enum DvbSubDestinationAlignment: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case centered = "CENTERED"
        case left = "LEFT"
        case smart = "SMART"
        public var description: String { return self.rawValue }
    }

    public enum DvbSubDestinationBackgroundColor: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case black = "BLACK"
        case none = "NONE"
        case white = "WHITE"
        public var description: String { return self.rawValue }
    }

    public enum DvbSubDestinationFontColor: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case black = "BLACK"
        case blue = "BLUE"
        case green = "GREEN"
        case red = "RED"
        case white = "WHITE"
        case yellow = "YELLOW"
        public var description: String { return self.rawValue }
    }

    public enum DvbSubDestinationOutlineColor: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case black = "BLACK"
        case blue = "BLUE"
        case green = "GREEN"
        case red = "RED"
        case white = "WHITE"
        case yellow = "YELLOW"
        public var description: String { return self.rawValue }
    }

    public enum DvbSubDestinationShadowColor: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case black = "BLACK"
        case none = "NONE"
        case white = "WHITE"
        public var description: String { return self.rawValue }
    }

    public enum DvbSubDestinationSubtitleRows: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case rows16 = "ROWS_16"
        case rows20 = "ROWS_20"
        case rows24 = "ROWS_24"
        public var description: String { return self.rawValue }
    }

    public enum DvbSubDestinationTeletextGridControl: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case fixed = "FIXED"
        case scaled = "SCALED"
        public var description: String { return self.rawValue }
    }

    public enum DvbSubOcrLanguage: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case deu = "DEU"
        case eng = "ENG"
        case fra = "FRA"
        case nld = "NLD"
        case por = "POR"
        case spa = "SPA"
        public var description: String { return self.rawValue }
    }

    public enum Eac3AtmosCodingMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case codingMode514 = "CODING_MODE_5_1_4"
        case codingMode714 = "CODING_MODE_7_1_4"
        case codingMode916 = "CODING_MODE_9_1_6"
        public var description: String { return self.rawValue }
    }

    public enum Eac3AtmosDrcLine: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case filmLight = "FILM_LIGHT"
        case filmStandard = "FILM_STANDARD"
        case musicLight = "MUSIC_LIGHT"
        case musicStandard = "MUSIC_STANDARD"
        case none = "NONE"
        case speech = "SPEECH"
        public var description: String { return self.rawValue }
    }

    public enum Eac3AtmosDrcRf: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case filmLight = "FILM_LIGHT"
        case filmStandard = "FILM_STANDARD"
        case musicLight = "MUSIC_LIGHT"
        case musicStandard = "MUSIC_STANDARD"
        case none = "NONE"
        case speech = "SPEECH"
        public var description: String { return self.rawValue }
    }

    public enum Eac3AttenuationControl: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case attenuate3Db = "ATTENUATE_3_DB"
        case none = "NONE"
        public var description: String { return self.rawValue }
    }

    public enum Eac3BitstreamMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case commentary = "COMMENTARY"
        case completeMain = "COMPLETE_MAIN"
        case emergency = "EMERGENCY"
        case hearingImpaired = "HEARING_IMPAIRED"
        case visuallyImpaired = "VISUALLY_IMPAIRED"
        public var description: String { return self.rawValue }
    }

    public enum Eac3CodingMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case codingMode10 = "CODING_MODE_1_0"
        case codingMode20 = "CODING_MODE_2_0"
        case codingMode32 = "CODING_MODE_3_2"
        public var description: String { return self.rawValue }
    }

    public enum Eac3DcFilter: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum Eac3DrcLine: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case filmLight = "FILM_LIGHT"
        case filmStandard = "FILM_STANDARD"
        case musicLight = "MUSIC_LIGHT"
        case musicStandard = "MUSIC_STANDARD"
        case none = "NONE"
        case speech = "SPEECH"
        public var description: String { return self.rawValue }
    }

    public enum Eac3DrcRf: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case filmLight = "FILM_LIGHT"
        case filmStandard = "FILM_STANDARD"
        case musicLight = "MUSIC_LIGHT"
        case musicStandard = "MUSIC_STANDARD"
        case none = "NONE"
        case speech = "SPEECH"
        public var description: String { return self.rawValue }
    }

    public enum Eac3LfeControl: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case lfe = "LFE"
        case noLfe = "NO_LFE"
        public var description: String { return self.rawValue }
    }

    public enum Eac3LfeFilter: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum Eac3MetadataControl: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case followInput = "FOLLOW_INPUT"
        case useConfigured = "USE_CONFIGURED"
        public var description: String { return self.rawValue }
    }

    public enum Eac3PassthroughControl: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case noPassthrough = "NO_PASSTHROUGH"
        case whenPossible = "WHEN_POSSIBLE"
        public var description: String { return self.rawValue }
    }

    public enum Eac3PhaseControl: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case noShift = "NO_SHIFT"
        case shift90Degrees = "SHIFT_90_DEGREES"
        public var description: String { return self.rawValue }
    }

    public enum Eac3StereoDownmix: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case dpl2 = "DPL2"
        case loRo = "LO_RO"
        case ltRt = "LT_RT"
        case notIndicated = "NOT_INDICATED"
        public var description: String { return self.rawValue }
    }

    public enum Eac3SurroundExMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        case notIndicated = "NOT_INDICATED"
        public var description: String { return self.rawValue }
    }

    public enum Eac3SurroundMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        case notIndicated = "NOT_INDICATED"
        public var description: String { return self.rawValue }
    }

    public enum EbuTtDDestinationStyleControl: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case exclude = "EXCLUDE"
        case include = "INCLUDE"
        public var description: String { return self.rawValue }
    }

    public enum EbuTtDFillLineGapControl: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum EmbeddedConvert608To708: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case upconvert = "UPCONVERT"
        public var description: String { return self.rawValue }
    }

    public enum EmbeddedScte20Detection: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case auto = "AUTO"
        case off = "OFF"
        public var description: String { return self.rawValue }
    }

    public enum EventBridgeRuleTemplateEventType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case mediaconnectAlert = "MEDIACONNECT_ALERT"
        case mediaconnectFlowStatusChange = "MEDIACONNECT_FLOW_STATUS_CHANGE"
        case mediaconnectOutputHealth = "MEDIACONNECT_OUTPUT_HEALTH"
        case mediaconnectSourceHealth = "MEDIACONNECT_SOURCE_HEALTH"
        case medialiveChannelAlert = "MEDIALIVE_CHANNEL_ALERT"
        case medialiveChannelInputChange = "MEDIALIVE_CHANNEL_INPUT_CHANGE"
        case medialiveChannelStateChange = "MEDIALIVE_CHANNEL_STATE_CHANGE"
        case medialiveMultiplexAlert = "MEDIALIVE_MULTIPLEX_ALERT"
        case medialiveMultiplexStateChange = "MEDIALIVE_MULTIPLEX_STATE_CHANGE"
        case mediapackageHarvestJobNotification = "MEDIAPACKAGE_HARVEST_JOB_NOTIFICATION"
        case mediapackageInputNotification = "MEDIAPACKAGE_INPUT_NOTIFICATION"
        case mediapackageKeyProviderNotification = "MEDIAPACKAGE_KEY_PROVIDER_NOTIFICATION"
        case signalMapActiveAlarm = "SIGNAL_MAP_ACTIVE_ALARM"
        public var description: String { return self.rawValue }
    }

    public enum FeatureActivationsInputPrepareScheduleActions: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum FeatureActivationsOutputStaticImageOverlayScheduleActions: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum FecOutputIncludeFec: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case column = "COLUMN"
        case columnAndRow = "COLUMN_AND_ROW"
        public var description: String { return self.rawValue }
    }

    public enum FixedAfd: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case afd0000 = "AFD_0000"
        case afd0010 = "AFD_0010"
        case afd0011 = "AFD_0011"
        case afd0100 = "AFD_0100"
        case afd1000 = "AFD_1000"
        case afd1001 = "AFD_1001"
        case afd1010 = "AFD_1010"
        case afd1011 = "AFD_1011"
        case afd1101 = "AFD_1101"
        case afd1110 = "AFD_1110"
        case afd1111 = "AFD_1111"
        public var description: String { return self.rawValue }
    }

    public enum Fmp4NielsenId3Behavior: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case noPassthrough = "NO_PASSTHROUGH"
        case passthrough = "PASSTHROUGH"
        public var description: String { return self.rawValue }
    }

    public enum Fmp4TimedMetadataBehavior: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case noPassthrough = "NO_PASSTHROUGH"
        case passthrough = "PASSTHROUGH"
        public var description: String { return self.rawValue }
    }

    public enum FollowPoint: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case end = "END"
        case start = "START"
        public var description: String { return self.rawValue }
    }

    public enum FrameCaptureIntervalUnit: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case milliseconds = "MILLISECONDS"
        case seconds = "SECONDS"
        public var description: String { return self.rawValue }
    }

    public enum GlobalConfigurationInputEndAction: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case none = "NONE"
        case switchAndLoopInputs = "SWITCH_AND_LOOP_INPUTS"
        public var description: String { return self.rawValue }
    }

    public enum GlobalConfigurationLowFramerateInputs: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum GlobalConfigurationOutputLockingMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case epochLocking = "EPOCH_LOCKING"
        case pipelineLocking = "PIPELINE_LOCKING"
        public var description: String { return self.rawValue }
    }

    public enum GlobalConfigurationOutputTimingSource: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case inputClock = "INPUT_CLOCK"
        case systemClock = "SYSTEM_CLOCK"
        public var description: String { return self.rawValue }
    }

    public enum H264AdaptiveQuantization: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case auto = "AUTO"
        case high = "HIGH"
        case higher = "HIGHER"
        case low = "LOW"
        case max = "MAX"
        case medium = "MEDIUM"
        case off = "OFF"
        public var description: String { return self.rawValue }
    }

    public enum H264ColorMetadata: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case ignore = "IGNORE"
        case insert = "INSERT"
        public var description: String { return self.rawValue }
    }

    public enum H264EntropyEncoding: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case cabac = "CABAC"
        case cavlc = "CAVLC"
        public var description: String { return self.rawValue }
    }

    public enum H264FlickerAq: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum H264ForceFieldPictures: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum H264FramerateControl: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case initializeFromSource = "INITIALIZE_FROM_SOURCE"
        case specified = "SPECIFIED"
        public var description: String { return self.rawValue }
    }

    public enum H264GopBReference: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum H264GopSizeUnits: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case frames = "FRAMES"
        case seconds = "SECONDS"
        public var description: String { return self.rawValue }
    }

    public enum H264Level: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case h264Level1 = "H264_LEVEL_1"
        case h264Level11 = "H264_LEVEL_1_1"
        case h264Level12 = "H264_LEVEL_1_2"
        case h264Level13 = "H264_LEVEL_1_3"
        case h264Level2 = "H264_LEVEL_2"
        case h264Level21 = "H264_LEVEL_2_1"
        case h264Level22 = "H264_LEVEL_2_2"
        case h264Level3 = "H264_LEVEL_3"
        case h264Level31 = "H264_LEVEL_3_1"
        case h264Level32 = "H264_LEVEL_3_2"
        case h264Level4 = "H264_LEVEL_4"
        case h264Level41 = "H264_LEVEL_4_1"
        case h264Level42 = "H264_LEVEL_4_2"
        case h264Level5 = "H264_LEVEL_5"
        case h264Level51 = "H264_LEVEL_5_1"
        case h264Level52 = "H264_LEVEL_5_2"
        case h264LevelAuto = "H264_LEVEL_AUTO"
        public var description: String { return self.rawValue }
    }

    public enum H264LookAheadRateControl: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case high = "HIGH"
        case low = "LOW"
        case medium = "MEDIUM"
        public var description: String { return self.rawValue }
    }

    public enum H264ParControl: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case initializeFromSource = "INITIALIZE_FROM_SOURCE"
        case specified = "SPECIFIED"
        public var description: String { return self.rawValue }
    }

    public enum H264Profile: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case baseline = "BASELINE"
        case high = "HIGH"
        case high10Bit = "HIGH_10BIT"
        case high422 = "HIGH_422"
        case high42210Bit = "HIGH_422_10BIT"
        case main = "MAIN"
        public var description: String { return self.rawValue }
    }

    public enum H264QualityLevel: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case enhancedQuality = "ENHANCED_QUALITY"
        case standardQuality = "STANDARD_QUALITY"
        public var description: String { return self.rawValue }
    }

    public enum H264RateControlMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case cbr = "CBR"
        case multiplex = "MULTIPLEX"
        case qvbr = "QVBR"
        case vbr = "VBR"
        public var description: String { return self.rawValue }
    }

    public enum H264ScanType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case interlaced = "INTERLACED"
        case progressive = "PROGRESSIVE"
        public var description: String { return self.rawValue }
    }

    public enum H264SceneChangeDetect: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum H264SpatialAq: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum H264SubGopLength: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case dynamic = "DYNAMIC"
        case fixed = "FIXED"
        public var description: String { return self.rawValue }
    }

    public enum H264Syntax: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case `default` = "DEFAULT"
        case rp2027 = "RP2027"
        public var description: String { return self.rawValue }
    }

    public enum H264TemporalAq: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum H264TimecodeInsertionBehavior: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case picTimingSei = "PIC_TIMING_SEI"
        public var description: String { return self.rawValue }
    }

    public enum H265AdaptiveQuantization: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case auto = "AUTO"
        case high = "HIGH"
        case higher = "HIGHER"
        case low = "LOW"
        case max = "MAX"
        case medium = "MEDIUM"
        case off = "OFF"
        public var description: String { return self.rawValue }
    }

    public enum H265AlternativeTransferFunction: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case insert = "INSERT"
        case omit = "OMIT"
        public var description: String { return self.rawValue }
    }

    public enum H265ColorMetadata: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case ignore = "IGNORE"
        case insert = "INSERT"
        public var description: String { return self.rawValue }
    }

    public enum H265Deblocking: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum H265FlickerAq: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum H265GopBReference: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum H265GopSizeUnits: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case frames = "FRAMES"
        case seconds = "SECONDS"
        public var description: String { return self.rawValue }
    }

    public enum H265Level: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case h265Level1 = "H265_LEVEL_1"
        case h265Level2 = "H265_LEVEL_2"
        case h265Level21 = "H265_LEVEL_2_1"
        case h265Level3 = "H265_LEVEL_3"
        case h265Level31 = "H265_LEVEL_3_1"
        case h265Level4 = "H265_LEVEL_4"
        case h265Level41 = "H265_LEVEL_4_1"
        case h265Level5 = "H265_LEVEL_5"
        case h265Level51 = "H265_LEVEL_5_1"
        case h265Level52 = "H265_LEVEL_5_2"
        case h265Level6 = "H265_LEVEL_6"
        case h265Level61 = "H265_LEVEL_6_1"
        case h265Level62 = "H265_LEVEL_6_2"
        case h265LevelAuto = "H265_LEVEL_AUTO"
        public var description: String { return self.rawValue }
    }

    public enum H265LookAheadRateControl: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case high = "HIGH"
        case low = "LOW"
        case medium = "MEDIUM"
        public var description: String { return self.rawValue }
    }

    public enum H265MvOverPictureBoundaries: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum H265MvTemporalPredictor: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum H265Profile: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case main = "MAIN"
        case main10Bit = "MAIN_10BIT"
        public var description: String { return self.rawValue }
    }

    public enum H265RateControlMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case cbr = "CBR"
        case multiplex = "MULTIPLEX"
        case qvbr = "QVBR"
        public var description: String { return self.rawValue }
    }

    public enum H265ScanType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case interlaced = "INTERLACED"
        case progressive = "PROGRESSIVE"
        public var description: String { return self.rawValue }
    }

    public enum H265SceneChangeDetect: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum H265SubGopLength: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case dynamic = "DYNAMIC"
        case fixed = "FIXED"
        public var description: String { return self.rawValue }
    }

    public enum H265Tier: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case high = "HIGH"
        case main = "MAIN"
        public var description: String { return self.rawValue }
    }

    public enum H265TilePadding: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case none = "NONE"
        case padded = "PADDED"
        public var description: String { return self.rawValue }
    }

    public enum H265TimecodeInsertionBehavior: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case picTimingSei = "PIC_TIMING_SEI"
        public var description: String { return self.rawValue }
    }

    public enum H265TreeblockSize: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case auto = "AUTO"
        case treeSize32X32 = "TREE_SIZE_32X32"
        public var description: String { return self.rawValue }
    }

    public enum HlsAdMarkers: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case adobe = "ADOBE"
        case elemental = "ELEMENTAL"
        case elementalScte35 = "ELEMENTAL_SCTE35"
        public var description: String { return self.rawValue }
    }

    public enum HlsAkamaiHttpTransferMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case chunked = "CHUNKED"
        case nonChunked = "NON_CHUNKED"
        public var description: String { return self.rawValue }
    }

    public enum HlsAutoSelect: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case no = "NO"
        case omit = "OMIT"
        case yes = "YES"
        public var description: String { return self.rawValue }
    }

    public enum HlsCaptionLanguageSetting: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case insert = "INSERT"
        case none = "NONE"
        case omit = "OMIT"
        public var description: String { return self.rawValue }
    }

    public enum HlsClientCache: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum HlsCodecSpecification: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case rfc4281 = "RFC_4281"
        case rfc6381 = "RFC_6381"
        public var description: String { return self.rawValue }
    }

    public enum HlsDefault: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case no = "NO"
        case omit = "OMIT"
        case yes = "YES"
        public var description: String { return self.rawValue }
    }

    public enum HlsDirectoryStructure: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case singleDirectory = "SINGLE_DIRECTORY"
        case subdirectoryPerStream = "SUBDIRECTORY_PER_STREAM"
        public var description: String { return self.rawValue }
    }

    public enum HlsDiscontinuityTags: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case insert = "INSERT"
        case neverInsert = "NEVER_INSERT"
        public var description: String { return self.rawValue }
    }

    public enum HlsEncryptionType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case aes128 = "AES128"
        case sampleAes = "SAMPLE_AES"
        public var description: String { return self.rawValue }
    }

    public enum HlsH265PackagingType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case hev1 = "HEV1"
        case hvc1 = "HVC1"
        public var description: String { return self.rawValue }
    }

    public enum HlsId3SegmentTaggingState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum HlsIncompleteSegmentBehavior: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case auto = "AUTO"
        case suppress = "SUPPRESS"
        public var description: String { return self.rawValue }
    }

    public enum HlsIvInManifest: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case exclude = "EXCLUDE"
        case include = "INCLUDE"
        public var description: String { return self.rawValue }
    }

    public enum HlsIvSource: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case explicit = "EXPLICIT"
        case followsSegmentNumber = "FOLLOWS_SEGMENT_NUMBER"
        public var description: String { return self.rawValue }
    }

    public enum HlsManifestCompression: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case gzip = "GZIP"
        case none = "NONE"
        public var description: String { return self.rawValue }
    }

    public enum HlsManifestDurationFormat: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case floatingPoint = "FLOATING_POINT"
        case integer = "INTEGER"
        public var description: String { return self.rawValue }
    }

    public enum HlsMediaStoreStorageClass: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case temporal = "TEMPORAL"
        public var description: String { return self.rawValue }
    }

    public enum HlsMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case live = "LIVE"
        case vod = "VOD"
        public var description: String { return self.rawValue }
    }

    public enum HlsOutputSelection: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case manifestsAndSegments = "MANIFESTS_AND_SEGMENTS"
        case segmentsOnly = "SEGMENTS_ONLY"
        case variantManifestsAndSegments = "VARIANT_MANIFESTS_AND_SEGMENTS"
        public var description: String { return self.rawValue }
    }

    public enum HlsProgramDateTime: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case exclude = "EXCLUDE"
        case include = "INCLUDE"
        public var description: String { return self.rawValue }
    }

    public enum HlsProgramDateTimeClock: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case initializeFromOutputTimecode = "INITIALIZE_FROM_OUTPUT_TIMECODE"
        case systemClock = "SYSTEM_CLOCK"
        public var description: String { return self.rawValue }
    }

    public enum HlsRedundantManifest: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum HlsScte35SourceType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case manifest = "MANIFEST"
        case segments = "SEGMENTS"
        public var description: String { return self.rawValue }
    }

    public enum HlsSegmentationMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case useInputSegmentation = "USE_INPUT_SEGMENTATION"
        case useSegmentDuration = "USE_SEGMENT_DURATION"
        public var description: String { return self.rawValue }
    }

    public enum HlsStreamInfResolution: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case exclude = "EXCLUDE"
        case include = "INCLUDE"
        public var description: String { return self.rawValue }
    }

    public enum HlsTimedMetadataId3Frame: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case none = "NONE"
        case priv = "PRIV"
        case tdrl = "TDRL"
        public var description: String { return self.rawValue }
    }

    public enum HlsTsFileMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case segmentedFiles = "SEGMENTED_FILES"
        case singleFile = "SINGLE_FILE"
        public var description: String { return self.rawValue }
    }

    public enum HlsWebdavHttpTransferMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case chunked = "CHUNKED"
        case nonChunked = "NON_CHUNKED"
        public var description: String { return self.rawValue }
    }

    public enum IFrameOnlyPlaylistType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case standard = "STANDARD"
        public var description: String { return self.rawValue }
    }

    public enum IncludeFillerNalUnits: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case auto = "AUTO"
        case drop = "DROP"
        case include = "INCLUDE"
        public var description: String { return self.rawValue }
    }

    public enum InputClass: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case singlePipeline = "SINGLE_PIPELINE"
        case standard = "STANDARD"
        public var description: String { return self.rawValue }
    }

    public enum InputCodec: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case avc = "AVC"
        case hevc = "HEVC"
        case mpeg2 = "MPEG2"
        public var description: String { return self.rawValue }
    }

    public enum InputDeblockFilter: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum InputDenoiseFilter: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum InputDeviceActiveInput: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case hdmi = "HDMI"
        case sdi = "SDI"
        public var description: String { return self.rawValue }
    }

    public enum InputDeviceCodec: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case avc = "AVC"
        case hevc = "HEVC"
        public var description: String { return self.rawValue }
    }

    public enum InputDeviceConfigurableAudioChannelPairProfile: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case cbrAacHq192000 = "CBR-AAC_HQ-192000"
        case cbrAacHq256000 = "CBR-AAC_HQ-256000"
        case cbrAacHq384000 = "CBR-AAC_HQ-384000"
        case cbrAacHq512000 = "CBR-AAC_HQ-512000"
        case disabled = "DISABLED"
        case vbrAacHe64000 = "VBR-AAC_HE-64000"
        case vbrAacHhe16000 = "VBR-AAC_HHE-16000"
        case vbrAacLc128000 = "VBR-AAC_LC-128000"
        public var description: String { return self.rawValue }
    }

    public enum InputDeviceConfiguredInput: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case auto = "AUTO"
        case hdmi = "HDMI"
        case sdi = "SDI"
        public var description: String { return self.rawValue }
    }

    public enum InputDeviceConnectionState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case connected = "CONNECTED"
        case disconnected = "DISCONNECTED"
        public var description: String { return self.rawValue }
    }

    public enum InputDeviceIpScheme: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case `static` = "STATIC"
        case dhcp = "DHCP"
        public var description: String { return self.rawValue }
    }

    public enum InputDeviceOutputType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case mediaconnectFlow = "MEDIACONNECT_FLOW"
        case medialiveInput = "MEDIALIVE_INPUT"
        case none = "NONE"
        public var description: String { return self.rawValue }
    }

    public enum InputDeviceScanType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case interlaced = "INTERLACED"
        case progressive = "PROGRESSIVE"
        public var description: String { return self.rawValue }
    }

    public enum InputDeviceState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case idle = "IDLE"
        case streaming = "STREAMING"
        public var description: String { return self.rawValue }
    }

    public enum InputDeviceTransferType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case incoming = "INCOMING"
        case outgoing = "OUTGOING"
        public var description: String { return self.rawValue }
    }

    public enum InputDeviceType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case hd = "HD"
        case uhd = "UHD"
        public var description: String { return self.rawValue }
    }

    public enum InputDeviceUhdAudioChannelPairProfile: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case cbrAacHq192000 = "CBR-AAC_HQ-192000"
        case cbrAacHq256000 = "CBR-AAC_HQ-256000"
        case cbrAacHq384000 = "CBR-AAC_HQ-384000"
        case cbrAacHq512000 = "CBR-AAC_HQ-512000"
        case disabled = "DISABLED"
        case vbrAacHe64000 = "VBR-AAC_HE-64000"
        case vbrAacHhe16000 = "VBR-AAC_HHE-16000"
        case vbrAacLc128000 = "VBR-AAC_LC-128000"
        public var description: String { return self.rawValue }
    }

    public enum InputFilter: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case auto = "AUTO"
        case disabled = "DISABLED"
        case forced = "FORCED"
        public var description: String { return self.rawValue }
    }

    public enum InputLossActionForHlsOut: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case emitOutput = "EMIT_OUTPUT"
        case pauseOutput = "PAUSE_OUTPUT"
        public var description: String { return self.rawValue }
    }

    public enum InputLossActionForMsSmoothOut: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case emitOutput = "EMIT_OUTPUT"
        case pauseOutput = "PAUSE_OUTPUT"
        public var description: String { return self.rawValue }
    }

    public enum InputLossActionForRtmpOut: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case emitOutput = "EMIT_OUTPUT"
        case pauseOutput = "PAUSE_OUTPUT"
        public var description: String { return self.rawValue }
    }

    public enum InputLossActionForUdpOut: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case dropProgram = "DROP_PROGRAM"
        case dropTs = "DROP_TS"
        case emitProgram = "EMIT_PROGRAM"
        public var description: String { return self.rawValue }
    }

    public enum InputLossImageType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case color = "COLOR"
        case slate = "SLATE"
        public var description: String { return self.rawValue }
    }

    public enum InputMaximumBitrate: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case max10Mbps = "MAX_10_MBPS"
        case max20Mbps = "MAX_20_MBPS"
        case max50Mbps = "MAX_50_MBPS"
        public var description: String { return self.rawValue }
    }

    public enum InputNetworkLocation: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case aws = "AWS"
        case onPremises = "ON_PREMISES"
        public var description: String { return self.rawValue }
    }

    public enum InputPreference: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case equalInputPreference = "EQUAL_INPUT_PREFERENCE"
        case primaryInputPreferred = "PRIMARY_INPUT_PREFERRED"
        public var description: String { return self.rawValue }
    }

    public enum InputResolution: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case hd = "HD"
        case sd = "SD"
        case uhd = "UHD"
        public var description: String { return self.rawValue }
    }

    public enum InputSecurityGroupState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case deleted = "DELETED"
        case idle = "IDLE"
        case inUse = "IN_USE"
        case updating = "UPDATING"
        public var description: String { return self.rawValue }
    }

    public enum InputSourceEndBehavior: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case `continue` = "CONTINUE"
        case loop = "LOOP"
        public var description: String { return self.rawValue }
    }

    public enum InputSourceType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case `static` = "STATIC"
        case dynamic = "DYNAMIC"
        public var description: String { return self.rawValue }
    }

    public enum InputState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case attached = "ATTACHED"
        case creating = "CREATING"
        case deleted = "DELETED"
        case deleting = "DELETING"
        case detached = "DETACHED"
        public var description: String { return self.rawValue }
    }

    public enum InputTimecodeSource: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case embedded = "EMBEDDED"
        case zerobased = "ZEROBASED"
        public var description: String { return self.rawValue }
    }

    public enum InputType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case awsCdi = "AWS_CDI"
        case inputDevice = "INPUT_DEVICE"
        case mediaconnect = "MEDIACONNECT"
        case mp4File = "MP4_FILE"
        case multicast = "MULTICAST"
        case rtmpPull = "RTMP_PULL"
        case rtmpPush = "RTMP_PUSH"
        case rtpPush = "RTP_PUSH"
        case sdi = "SDI"
        case smpte2110ReceiverGroup = "SMPTE_2110_RECEIVER_GROUP"
        case srtCaller = "SRT_CALLER"
        case tsFile = "TS_FILE"
        case udpPush = "UDP_PUSH"
        case urlPull = "URL_PULL"
        public var description: String { return self.rawValue }
    }

    public enum LastFrameClippingBehavior: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case excludeLastFrame = "EXCLUDE_LAST_FRAME"
        case includeLastFrame = "INCLUDE_LAST_FRAME"
        public var description: String { return self.rawValue }
    }

    public enum LogLevel: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case debug = "DEBUG"
        case disabled = "DISABLED"
        case error = "ERROR"
        case info = "INFO"
        case warning = "WARNING"
        public var description: String { return self.rawValue }
    }

    public enum M2tsAbsentInputAudioBehavior: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case drop = "DROP"
        case encodeSilence = "ENCODE_SILENCE"
        public var description: String { return self.rawValue }
    }

    public enum M2tsArib: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum M2tsAribCaptionsPidControl: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case auto = "AUTO"
        case useConfigured = "USE_CONFIGURED"
        public var description: String { return self.rawValue }
    }

    public enum M2tsAudioBufferModel: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case atsc = "ATSC"
        case dvb = "DVB"
        public var description: String { return self.rawValue }
    }

    public enum M2tsAudioInterval: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case videoAndFixedIntervals = "VIDEO_AND_FIXED_INTERVALS"
        case videoInterval = "VIDEO_INTERVAL"
        public var description: String { return self.rawValue }
    }

    public enum M2tsAudioStreamType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case atsc = "ATSC"
        case dvb = "DVB"
        public var description: String { return self.rawValue }
    }

    public enum M2tsBufferModel: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case multiplex = "MULTIPLEX"
        case none = "NONE"
        public var description: String { return self.rawValue }
    }

    public enum M2tsCcDescriptor: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum M2tsEbifControl: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case none = "NONE"
        case passthrough = "PASSTHROUGH"
        public var description: String { return self.rawValue }
    }

    public enum M2tsEbpPlacement: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case videoAndAudioPids = "VIDEO_AND_AUDIO_PIDS"
        case videoPid = "VIDEO_PID"
        public var description: String { return self.rawValue }
    }

    public enum M2tsEsRateInPes: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case exclude = "EXCLUDE"
        case include = "INCLUDE"
        public var description: String { return self.rawValue }
    }

    public enum M2tsKlv: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case none = "NONE"
        case passthrough = "PASSTHROUGH"
        public var description: String { return self.rawValue }
    }

    public enum M2tsNielsenId3Behavior: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case noPassthrough = "NO_PASSTHROUGH"
        case passthrough = "PASSTHROUGH"
        public var description: String { return self.rawValue }
    }

    public enum M2tsPcrControl: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case configuredPcrPeriod = "CONFIGURED_PCR_PERIOD"
        case pcrEveryPesPacket = "PCR_EVERY_PES_PACKET"
        public var description: String { return self.rawValue }
    }

    public enum M2tsRateMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case cbr = "CBR"
        case vbr = "VBR"
        public var description: String { return self.rawValue }
    }

    public enum M2tsScte35Control: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case none = "NONE"
        case passthrough = "PASSTHROUGH"
        public var description: String { return self.rawValue }
    }

    public enum M2tsSegmentationMarkers: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case ebp = "EBP"
        case ebpLegacy = "EBP_LEGACY"
        case none = "NONE"
        case psiSegstart = "PSI_SEGSTART"
        case raiAdapt = "RAI_ADAPT"
        case raiSegstart = "RAI_SEGSTART"
        public var description: String { return self.rawValue }
    }

    public enum M2tsSegmentationStyle: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case maintainCadence = "MAINTAIN_CADENCE"
        case resetCadence = "RESET_CADENCE"
        public var description: String { return self.rawValue }
    }

    public enum M2tsTimedMetadataBehavior: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case noPassthrough = "NO_PASSTHROUGH"
        case passthrough = "PASSTHROUGH"
        public var description: String { return self.rawValue }
    }

    public enum M3u8KlvBehavior: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case noPassthrough = "NO_PASSTHROUGH"
        case passthrough = "PASSTHROUGH"
        public var description: String { return self.rawValue }
    }

    public enum M3u8NielsenId3Behavior: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case noPassthrough = "NO_PASSTHROUGH"
        case passthrough = "PASSTHROUGH"
        public var description: String { return self.rawValue }
    }

    public enum M3u8PcrControl: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case configuredPcrPeriod = "CONFIGURED_PCR_PERIOD"
        case pcrEveryPesPacket = "PCR_EVERY_PES_PACKET"
        public var description: String { return self.rawValue }
    }

    public enum M3u8Scte35Behavior: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case noPassthrough = "NO_PASSTHROUGH"
        case passthrough = "PASSTHROUGH"
        public var description: String { return self.rawValue }
    }

    public enum M3u8TimedMetadataBehavior: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case noPassthrough = "NO_PASSTHROUGH"
        case passthrough = "PASSTHROUGH"
        public var description: String { return self.rawValue }
    }

    public enum MaintenanceDay: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case friday = "FRIDAY"
        case monday = "MONDAY"
        case saturday = "SATURDAY"
        case sunday = "SUNDAY"
        case thursday = "THURSDAY"
        case tuesday = "TUESDAY"
        case wednesday = "WEDNESDAY"
        public var description: String { return self.rawValue }
    }

    public enum MotionGraphicsInsertion: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum Mp2CodingMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case codingMode10 = "CODING_MODE_1_0"
        case codingMode20 = "CODING_MODE_2_0"
        public var description: String { return self.rawValue }
    }

    public enum Mpeg2AdaptiveQuantization: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case auto = "AUTO"
        case high = "HIGH"
        case low = "LOW"
        case medium = "MEDIUM"
        case off = "OFF"
        public var description: String { return self.rawValue }
    }

    public enum Mpeg2ColorMetadata: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case ignore = "IGNORE"
        case insert = "INSERT"
        public var description: String { return self.rawValue }
    }

    public enum Mpeg2ColorSpace: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case auto = "AUTO"
        case passthrough = "PASSTHROUGH"
        public var description: String { return self.rawValue }
    }

    public enum Mpeg2DisplayRatio: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case displayratio16x9 = "DISPLAYRATIO16X9"
        case displayratio4x3 = "DISPLAYRATIO4X3"
        public var description: String { return self.rawValue }
    }

    public enum Mpeg2GopSizeUnits: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case frames = "FRAMES"
        case seconds = "SECONDS"
        public var description: String { return self.rawValue }
    }

    public enum Mpeg2ScanType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case interlaced = "INTERLACED"
        case progressive = "PROGRESSIVE"
        public var description: String { return self.rawValue }
    }

    public enum Mpeg2SubGopLength: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case dynamic = "DYNAMIC"
        case fixed = "FIXED"
        public var description: String { return self.rawValue }
    }

    public enum Mpeg2TimecodeInsertionBehavior: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case gopTimecode = "GOP_TIMECODE"
        public var description: String { return self.rawValue }
    }

    public enum MsSmoothH265PackagingType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case hev1 = "HEV1"
        case hvc1 = "HVC1"
        public var description: String { return self.rawValue }
    }

    public enum MultiplexState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case createFailed = "CREATE_FAILED"
        case creating = "CREATING"
        case deleted = "DELETED"
        case deleting = "DELETING"
        case idle = "IDLE"
        case recovering = "RECOVERING"
        case running = "RUNNING"
        case starting = "STARTING"
        case stopping = "STOPPING"
        public var description: String { return self.rawValue }
    }

    public enum NetworkInputServerValidation: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case checkCryptographyAndValidateName = "CHECK_CRYPTOGRAPHY_AND_VALIDATE_NAME"
        case checkCryptographyOnly = "CHECK_CRYPTOGRAPHY_ONLY"
        public var description: String { return self.rawValue }
    }

    public enum NetworkInterfaceMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case bridge = "BRIDGE"
        case nat = "NAT"
        public var description: String { return self.rawValue }
    }

    public enum NetworkState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case active = "ACTIVE"
        case createFailed = "CREATE_FAILED"
        case creating = "CREATING"
        case deleteFailed = "DELETE_FAILED"
        case deleted = "DELETED"
        case deleting = "DELETING"
        case idle = "IDLE"
        case inUse = "IN_USE"
        case updating = "UPDATING"
        public var description: String { return self.rawValue }
    }

    public enum NielsenPcmToId3TaggingState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum NielsenWatermarkTimezones: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case americaPuertoRico = "AMERICA_PUERTO_RICO"
        case usAlaska = "US_ALASKA"
        case usArizona = "US_ARIZONA"
        case usCentral = "US_CENTRAL"
        case usEastern = "US_EASTERN"
        case usHawaii = "US_HAWAII"
        case usMountain = "US_MOUNTAIN"
        case usPacific = "US_PACIFIC"
        case usSamoa = "US_SAMOA"
        case utc = "UTC"
        public var description: String { return self.rawValue }
    }

    public enum NielsenWatermarksCbetStepaside: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum NielsenWatermarksDistributionTypes: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case finalDistributor = "FINAL_DISTRIBUTOR"
        case programContent = "PROGRAM_CONTENT"
        public var description: String { return self.rawValue }
    }

    public enum NodeConnectionState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case connected = "CONNECTED"
        case disconnected = "DISCONNECTED"
        public var description: String { return self.rawValue }
    }

    public enum NodeRole: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case active = "ACTIVE"
        case backup = "BACKUP"
        public var description: String { return self.rawValue }
    }

    public enum NodeState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case activationFailed = "ACTIVATION_FAILED"
        case active = "ACTIVE"
        case created = "CREATED"
        case deregistered = "DEREGISTERED"
        case deregistering = "DEREGISTERING"
        case deregistrationFailed = "DEREGISTRATION_FAILED"
        case draining = "DRAINING"
        case inUse = "IN_USE"
        case ready = "READY"
        case readyToActivate = "READY_TO_ACTIVATE"
        case registering = "REGISTERING"
        case registrationFailed = "REGISTRATION_FAILED"
        public var description: String { return self.rawValue }
    }

    public enum OfferingDurationUnits: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case months = "MONTHS"
        public var description: String { return self.rawValue }
    }

    public enum OfferingType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case noUpfront = "NO_UPFRONT"
        public var description: String { return self.rawValue }
    }

    public enum PipelineId: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case pipeline0 = "PIPELINE_0"
        case pipeline1 = "PIPELINE_1"
        public var description: String { return self.rawValue }
    }

    public enum PreferredChannelPipeline: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case currentlyActive = "CURRENTLY_ACTIVE"
        case pipeline0 = "PIPELINE_0"
        case pipeline1 = "PIPELINE_1"
        public var description: String { return self.rawValue }
    }

    public enum RebootInputDeviceForce: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case no = "NO"
        case yes = "YES"
        public var description: String { return self.rawValue }
    }

    public enum ReservationAutomaticRenewal: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        case unavailable = "UNAVAILABLE"
        public var description: String { return self.rawValue }
    }

    public enum ReservationCodec: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case audio = "AUDIO"
        case av1 = "AV1"
        case avc = "AVC"
        case hevc = "HEVC"
        case link = "LINK"
        case mpeg2 = "MPEG2"
        public var description: String { return self.rawValue }
    }

    public enum ReservationMaximumBitrate: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case max10Mbps = "MAX_10_MBPS"
        case max20Mbps = "MAX_20_MBPS"
        case max50Mbps = "MAX_50_MBPS"
        public var description: String { return self.rawValue }
    }

    public enum ReservationMaximumFramerate: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case max30Fps = "MAX_30_FPS"
        case max60Fps = "MAX_60_FPS"
        public var description: String { return self.rawValue }
    }

    public enum ReservationResolution: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case fhd = "FHD"
        case hd = "HD"
        case sd = "SD"
        case uhd = "UHD"
        public var description: String { return self.rawValue }
    }

    public enum ReservationResourceType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case channel = "CHANNEL"
        case input = "INPUT"
        case multiplex = "MULTIPLEX"
        case output = "OUTPUT"
        public var description: String { return self.rawValue }
    }

    public enum ReservationSpecialFeature: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case advancedAudio = "ADVANCED_AUDIO"
        case audioNormalization = "AUDIO_NORMALIZATION"
        case mghd = "MGHD"
        case mguhd = "MGUHD"
        public var description: String { return self.rawValue }
    }

    public enum ReservationState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case active = "ACTIVE"
        case canceled = "CANCELED"
        case deleted = "DELETED"
        case expired = "EXPIRED"
        public var description: String { return self.rawValue }
    }

    public enum ReservationVideoQuality: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case enhanced = "ENHANCED"
        case premium = "PREMIUM"
        case standard = "STANDARD"
        public var description: String { return self.rawValue }
    }

    public enum RtmpAdMarkers: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case onCuePointScte35 = "ON_CUE_POINT_SCTE35"
        public var description: String { return self.rawValue }
    }

    public enum RtmpCacheFullBehavior: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disconnectImmediately = "DISCONNECT_IMMEDIATELY"
        case waitForServer = "WAIT_FOR_SERVER"
        public var description: String { return self.rawValue }
    }

    public enum RtmpCaptionData: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case all = "ALL"
        case field1608 = "FIELD1_608"
        case field1AndField2608 = "FIELD1_AND_FIELD2_608"
        public var description: String { return self.rawValue }
    }

    public enum RtmpOutputCertificateMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case selfSigned = "SELF_SIGNED"
        case verifyAuthenticity = "VERIFY_AUTHENTICITY"
        public var description: String { return self.rawValue }
    }

    public enum S3CannedAcl: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case authenticatedRead = "AUTHENTICATED_READ"
        case bucketOwnerFullControl = "BUCKET_OWNER_FULL_CONTROL"
        case bucketOwnerRead = "BUCKET_OWNER_READ"
        case publicRead = "PUBLIC_READ"
        public var description: String { return self.rawValue }
    }

    public enum Scte20Convert608To708: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case upconvert = "UPCONVERT"
        public var description: String { return self.rawValue }
    }

    public enum Scte27OcrLanguage: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case deu = "DEU"
        case eng = "ENG"
        case fra = "FRA"
        case nld = "NLD"
        case por = "POR"
        case spa = "SPA"
        public var description: String { return self.rawValue }
    }

    public enum Scte35AposNoRegionalBlackoutBehavior: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case follow = "FOLLOW"
        case ignore = "IGNORE"
        public var description: String { return self.rawValue }
    }

    public enum Scte35AposWebDeliveryAllowedBehavior: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case follow = "FOLLOW"
        case ignore = "IGNORE"
        public var description: String { return self.rawValue }
    }

    public enum Scte35ArchiveAllowedFlag: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case archiveAllowed = "ARCHIVE_ALLOWED"
        case archiveNotAllowed = "ARCHIVE_NOT_ALLOWED"
        public var description: String { return self.rawValue }
    }

    public enum Scte35DeviceRestrictions: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case none = "NONE"
        case restrictGroup0 = "RESTRICT_GROUP0"
        case restrictGroup1 = "RESTRICT_GROUP1"
        case restrictGroup2 = "RESTRICT_GROUP2"
        public var description: String { return self.rawValue }
    }

    public enum Scte35InputMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case fixed = "FIXED"
        case followActive = "FOLLOW_ACTIVE"
        public var description: String { return self.rawValue }
    }

    public enum Scte35NoRegionalBlackoutFlag: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case noRegionalBlackout = "NO_REGIONAL_BLACKOUT"
        case regionalBlackout = "REGIONAL_BLACKOUT"
        public var description: String { return self.rawValue }
    }

    public enum Scte35SegmentationCancelIndicator: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case segmentationEventCanceled = "SEGMENTATION_EVENT_CANCELED"
        case segmentationEventNotCanceled = "SEGMENTATION_EVENT_NOT_CANCELED"
        public var description: String { return self.rawValue }
    }

    public enum Scte35SegmentationScope: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case allOutputGroups = "ALL_OUTPUT_GROUPS"
        case scte35EnabledOutputGroups = "SCTE35_ENABLED_OUTPUT_GROUPS"
        public var description: String { return self.rawValue }
    }

    public enum Scte35SpliceInsertNoRegionalBlackoutBehavior: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case follow = "FOLLOW"
        case ignore = "IGNORE"
        public var description: String { return self.rawValue }
    }

    public enum Scte35SpliceInsertWebDeliveryAllowedBehavior: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case follow = "FOLLOW"
        case ignore = "IGNORE"
        public var description: String { return self.rawValue }
    }

    public enum Scte35Type: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case none = "NONE"
        case scte35WithoutSegmentation = "SCTE_35_WITHOUT_SEGMENTATION"
        public var description: String { return self.rawValue }
    }

    public enum Scte35WebDeliveryAllowedFlag: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case webDeliveryAllowed = "WEB_DELIVERY_ALLOWED"
        case webDeliveryNotAllowed = "WEB_DELIVERY_NOT_ALLOWED"
        public var description: String { return self.rawValue }
    }

    public enum SdiSourceMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case interleave = "INTERLEAVE"
        case quadrant = "QUADRANT"
        public var description: String { return self.rawValue }
    }

    public enum SdiSourceState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case deleted = "DELETED"
        case idle = "IDLE"
        case inUse = "IN_USE"
        public var description: String { return self.rawValue }
    }

    public enum SdiSourceType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case quad = "QUAD"
        case single = "SINGLE"
        public var description: String { return self.rawValue }
    }

    public enum SignalMapMonitorDeploymentStatus: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case deleteComplete = "DELETE_COMPLETE"
        case deleteFailed = "DELETE_FAILED"
        case deleteInProgress = "DELETE_IN_PROGRESS"
        case deploymentComplete = "DEPLOYMENT_COMPLETE"
        case deploymentFailed = "DEPLOYMENT_FAILED"
        case deploymentInProgress = "DEPLOYMENT_IN_PROGRESS"
        case dryRunDeploymentComplete = "DRY_RUN_DEPLOYMENT_COMPLETE"
        case dryRunDeploymentFailed = "DRY_RUN_DEPLOYMENT_FAILED"
        case dryRunDeploymentInProgress = "DRY_RUN_DEPLOYMENT_IN_PROGRESS"
        case notDeployed = "NOT_DEPLOYED"
        public var description: String { return self.rawValue }
    }

    public enum SignalMapStatus: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case createComplete = "CREATE_COMPLETE"
        case createFailed = "CREATE_FAILED"
        case createInProgress = "CREATE_IN_PROGRESS"
        case notReady = "NOT_READY"
        case ready = "READY"
        case updateComplete = "UPDATE_COMPLETE"
        case updateFailed = "UPDATE_FAILED"
        case updateInProgress = "UPDATE_IN_PROGRESS"
        case updateReverted = "UPDATE_REVERTED"
        public var description: String { return self.rawValue }
    }

    public enum SmoothGroupAudioOnlyTimecodeControl: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case passthrough = "PASSTHROUGH"
        case useConfiguredClock = "USE_CONFIGURED_CLOCK"
        public var description: String { return self.rawValue }
    }

    public enum SmoothGroupCertificateMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case selfSigned = "SELF_SIGNED"
        case verifyAuthenticity = "VERIFY_AUTHENTICITY"
        public var description: String { return self.rawValue }
    }

    public enum SmoothGroupEventIdMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case noEventId = "NO_EVENT_ID"
        case useConfigured = "USE_CONFIGURED"
        case useTimestamp = "USE_TIMESTAMP"
        public var description: String { return self.rawValue }
    }

    public enum SmoothGroupEventStopBehavior: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case none = "NONE"
        case sendEos = "SEND_EOS"
        public var description: String { return self.rawValue }
    }

    public enum SmoothGroupSegmentationMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case useInputSegmentation = "USE_INPUT_SEGMENTATION"
        case useSegmentDuration = "USE_SEGMENT_DURATION"
        public var description: String { return self.rawValue }
    }

    public enum SmoothGroupSparseTrackType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case none = "NONE"
        case scte35 = "SCTE_35"
        case scte35WithoutSegmentation = "SCTE_35_WITHOUT_SEGMENTATION"
        public var description: String { return self.rawValue }
    }

    public enum SmoothGroupStreamManifestBehavior: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case doNotSend = "DO_NOT_SEND"
        case send = "SEND"
        public var description: String { return self.rawValue }
    }

    public enum SmoothGroupTimestampOffsetMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case useConfiguredOffset = "USE_CONFIGURED_OFFSET"
        case useEventStartDate = "USE_EVENT_START_DATE"
        public var description: String { return self.rawValue }
    }

    public enum Smpte2038DataPreference: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case ignore = "IGNORE"
        case prefer = "PREFER"
        public var description: String { return self.rawValue }
    }

    public enum SrtEncryptionType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case aes128 = "AES128"
        case aes192 = "AES192"
        case aes256 = "AES256"
        public var description: String { return self.rawValue }
    }

    public enum TemporalFilterPostFilterSharpening: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case auto = "AUTO"
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum TemporalFilterStrength: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case auto = "AUTO"
        case strength1 = "STRENGTH_1"
        case strength10 = "STRENGTH_10"
        case strength11 = "STRENGTH_11"
        case strength12 = "STRENGTH_12"
        case strength13 = "STRENGTH_13"
        case strength14 = "STRENGTH_14"
        case strength15 = "STRENGTH_15"
        case strength16 = "STRENGTH_16"
        case strength2 = "STRENGTH_2"
        case strength3 = "STRENGTH_3"
        case strength4 = "STRENGTH_4"
        case strength5 = "STRENGTH_5"
        case strength6 = "STRENGTH_6"
        case strength7 = "STRENGTH_7"
        case strength8 = "STRENGTH_8"
        case strength9 = "STRENGTH_9"
        public var description: String { return self.rawValue }
    }

    public enum ThumbnailState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case auto = "AUTO"
        case disabled = "DISABLED"
        public var description: String { return self.rawValue }
    }

    public enum ThumbnailType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case currentActive = "CURRENT_ACTIVE"
        case unspecified = "UNSPECIFIED"
        public var description: String { return self.rawValue }
    }

    public enum TimecodeBurninFontSize: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case extraSmall10 = "EXTRA_SMALL_10"
        case large48 = "LARGE_48"
        case medium32 = "MEDIUM_32"
        case small16 = "SMALL_16"
        public var description: String { return self.rawValue }
    }

    public enum TimecodeBurninPosition: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case bottomCenter = "BOTTOM_CENTER"
        case bottomLeft = "BOTTOM_LEFT"
        case bottomRight = "BOTTOM_RIGHT"
        case middleCenter = "MIDDLE_CENTER"
        case middleLeft = "MIDDLE_LEFT"
        case middleRight = "MIDDLE_RIGHT"
        case topCenter = "TOP_CENTER"
        case topLeft = "TOP_LEFT"
        case topRight = "TOP_RIGHT"
        public var description: String { return self.rawValue }
    }

    public enum TimecodeConfigSource: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case embedded = "EMBEDDED"
        case systemclock = "SYSTEMCLOCK"
        case zerobased = "ZEROBASED"
        public var description: String { return self.rawValue }
    }

    public enum TtmlDestinationStyleControl: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case passthrough = "PASSTHROUGH"
        case useConfigured = "USE_CONFIGURED"
        public var description: String { return self.rawValue }
    }

    public enum UdpTimedMetadataId3Frame: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case none = "NONE"
        case priv = "PRIV"
        case tdrl = "TDRL"
        public var description: String { return self.rawValue }
    }

    public enum UpdateNodeStateShape: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case active = "ACTIVE"
        case draining = "DRAINING"
        public var description: String { return self.rawValue }
    }

    public enum VideoDescriptionRespondToAfd: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case none = "NONE"
        case passthrough = "PASSTHROUGH"
        case respond = "RESPOND"
        public var description: String { return self.rawValue }
    }

    public enum VideoDescriptionScalingBehavior: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case `default` = "DEFAULT"
        case stretchToOutput = "STRETCH_TO_OUTPUT"
        public var description: String { return self.rawValue }
    }

    public enum VideoSelectorColorSpace: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case follow = "FOLLOW"
        case hdr10 = "HDR10"
        case hlg2020 = "HLG_2020"
        case rec601 = "REC_601"
        case rec709 = "REC_709"
        public var description: String { return self.rawValue }
    }

    public enum VideoSelectorColorSpaceUsage: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case fallback = "FALLBACK"
        case force = "FORCE"
        public var description: String { return self.rawValue }
    }

    public enum WavCodingMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case codingMode10 = "CODING_MODE_1_0"
        case codingMode20 = "CODING_MODE_2_0"
        case codingMode40 = "CODING_MODE_4_0"
        case codingMode80 = "CODING_MODE_8_0"
        public var description: String { return self.rawValue }
    }

    public enum WebvttDestinationStyleControl: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case noStyleData = "NO_STYLE_DATA"
        case passthrough = "PASSTHROUGH"
        public var description: String { return self.rawValue }
    }

    // MARK: Shapes

    public struct AacSettings: AWSEncodableShape & AWSDecodableShape {
        /// Average bitrate in bits/second. Valid values depend on rate control mode and profile.
        public let bitrate: Double?
        /// Mono, Stereo, or 5.1 channel layout. Valid values depend on rate control mode and profile. The adReceiverMix setting receives a stereo description plus control track and emits a mono AAC encode of the description track, with control data emitted in the PES header as per ETSI TS 101 154 Annex E.
        public let codingMode: AacCodingMode?
        /// Set to "broadcasterMixedAd" when input contains pre-mixed main audio + AD (narration) as a stereo pair.  The Audio Type field (audioType) will be set to 3, which signals to downstream systems that this stream contains "broadcaster mixed AD". Note that the input received by the encoder must contain pre-mixed audio; the encoder does not perform the mixing. The values in audioTypeControl and audioType (in AudioDescription) are ignored when set to broadcasterMixedAd.
        /// Leave set to "normal" when input does not contain pre-mixed audio + AD.
        public let inputType: AacInputType?
        /// AAC Profile.
        public let profile: AacProfile?
        /// Rate Control Mode.
        public let rateControlMode: AacRateControlMode?
        /// Sets LATM / LOAS AAC output for raw containers.
        public let rawFormat: AacRawFormat?
        /// Sample rate in Hz. Valid values depend on rate control mode and profile.
        public let sampleRate: Double?
        /// Use MPEG-2 AAC audio instead of MPEG-4 AAC audio for raw or MPEG-2 Transport Stream containers.
        public let spec: AacSpec?
        /// VBR Quality Level - Only used if rateControlMode is VBR.
        public let vbrQuality: AacVbrQuality?

        @inlinable
        public init(bitrate: Double? = nil, codingMode: AacCodingMode? = nil, inputType: AacInputType? = nil, profile: AacProfile? = nil, rateControlMode: AacRateControlMode? = nil, rawFormat: AacRawFormat? = nil, sampleRate: Double? = nil, spec: AacSpec? = nil, vbrQuality: AacVbrQuality? = nil) {
            self.bitrate = bitrate
            self.codingMode = codingMode
            self.inputType = inputType
            self.profile = profile
            self.rateControlMode = rateControlMode
            self.rawFormat = rawFormat
            self.sampleRate = sampleRate
            self.spec = spec
            self.vbrQuality = vbrQuality
        }

        private enum CodingKeys: String, CodingKey {
            case bitrate = "bitrate"
            case codingMode = "codingMode"
            case inputType = "inputType"
            case profile = "profile"
            case rateControlMode = "rateControlMode"
            case rawFormat = "rawFormat"
            case sampleRate = "sampleRate"
            case spec = "spec"
            case vbrQuality = "vbrQuality"
        }
    }

    public struct Ac3Settings: AWSEncodableShape & AWSDecodableShape {
        /// Applies a 3 dB attenuation to the surround channels. Applies only when the coding mode parameter is CODING_MODE_3_2_LFE.
        public let attenuationControl: Ac3AttenuationControl?
        /// Average bitrate in bits/second. Valid bitrates depend on the coding mode.
        public let bitrate: Double?
        /// Specifies the bitstream mode (bsmod) for the emitted AC-3 stream. See ATSC A/52-2012 for background on these values.
        public let bitstreamMode: Ac3BitstreamMode?
        /// Dolby Digital coding mode. Determines number of channels.
        public let codingMode: Ac3CodingMode?
        /// Sets the dialnorm for the output. If excluded and input audio is Dolby Digital, dialnorm will be passed through.
        public let dialnorm: Int?
        /// If set to filmStandard, adds dynamic range compression signaling to the output bitstream as defined in the Dolby Digital specification.
        public let drcProfile: Ac3DrcProfile?
        /// When set to enabled, applies a 120Hz lowpass filter to the LFE channel prior to encoding. Only valid in codingMode32Lfe mode.
        public let lfeFilter: Ac3LfeFilter?
        /// When set to "followInput", encoder metadata will be sourced from the DD, DD+, or DolbyE decoder that supplied this audio data. If audio was not supplied from one of these streams, then the static metadata settings will be used.
        public let metadataControl: Ac3MetadataControl?

        @inlinable
        public init(attenuationControl: Ac3AttenuationControl? = nil, bitrate: Double? = nil, bitstreamMode: Ac3BitstreamMode? = nil, codingMode: Ac3CodingMode? = nil, dialnorm: Int? = nil, drcProfile: Ac3DrcProfile? = nil, lfeFilter: Ac3LfeFilter? = nil, metadataControl: Ac3MetadataControl? = nil) {
            self.attenuationControl = attenuationControl
            self.bitrate = bitrate
            self.bitstreamMode = bitstreamMode
            self.codingMode = codingMode
            self.dialnorm = dialnorm
            self.drcProfile = drcProfile
            self.lfeFilter = lfeFilter
            self.metadataControl = metadataControl
        }

        public func validate(name: String) throws {
            try self.validate(self.dialnorm, name: "dialnorm", parent: name, max: 31)
            try self.validate(self.dialnorm, name: "dialnorm", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case attenuationControl = "attenuationControl"
            case bitrate = "bitrate"
            case bitstreamMode = "bitstreamMode"
            case codingMode = "codingMode"
            case dialnorm = "dialnorm"
            case drcProfile = "drcProfile"
            case lfeFilter = "lfeFilter"
            case metadataControl = "metadataControl"
        }
    }

    public struct AcceptInputDeviceTransferRequest: AWSEncodableShape {
        /// The unique ID of the input device to accept. For example, hd-123456789abcdef.
        public let inputDeviceId: String

        @inlinable
        public init(inputDeviceId: String) {
            self.inputDeviceId = inputDeviceId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.inputDeviceId, key: "InputDeviceId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct AcceptInputDeviceTransferResponse: AWSDecodableShape {
        public init() {}
    }

    public struct AccountConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// Specifies the KMS key to use for all features that use key encryption. Specify the ARN of a KMS key that you have created. Or leave blank to use the key that MediaLive creates and manages for you.
        public let kmsKeyId: String?

        @inlinable
        public init(kmsKeyId: String? = nil) {
            self.kmsKeyId = kmsKeyId
        }

        private enum CodingKeys: String, CodingKey {
            case kmsKeyId = "kmsKeyId"
        }
    }

    public struct AdditionalDestinations: AWSEncodableShape & AWSDecodableShape {
        /// The destination location
        public let destination: OutputLocationRef?

        @inlinable
        public init(destination: OutputLocationRef? = nil) {
            self.destination = destination
        }

        private enum CodingKeys: String, CodingKey {
            case destination = "destination"
        }
    }

    public struct AncillarySourceSettings: AWSEncodableShape & AWSDecodableShape {
        /// Specifies the number (1 to 4) of the captions channel you want to extract from the ancillary captions. If you plan to convert the ancillary captions to another format, complete this field. If you plan to choose Embedded as the captions destination in the output (to pass through all the channels in the ancillary captions), leave this field blank because MediaLive ignores the field.
        public let sourceAncillaryChannelNumber: Int?

        @inlinable
        public init(sourceAncillaryChannelNumber: Int? = nil) {
            self.sourceAncillaryChannelNumber = sourceAncillaryChannelNumber
        }

        public func validate(name: String) throws {
            try self.validate(self.sourceAncillaryChannelNumber, name: "sourceAncillaryChannelNumber", parent: name, max: 4)
            try self.validate(self.sourceAncillaryChannelNumber, name: "sourceAncillaryChannelNumber", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case sourceAncillaryChannelNumber = "sourceAncillaryChannelNumber"
        }
    }

    public struct AnywhereSettings: AWSEncodableShape {
        /// The ID of the channel placement group for the channel.
        public let channelPlacementGroupId: String?
        /// The ID of the cluster for the channel.
        public let clusterId: String?

        @inlinable
        public init(channelPlacementGroupId: String? = nil, clusterId: String? = nil) {
            self.channelPlacementGroupId = channelPlacementGroupId
            self.clusterId = clusterId
        }

        private enum CodingKeys: String, CodingKey {
            case channelPlacementGroupId = "channelPlacementGroupId"
            case clusterId = "clusterId"
        }
    }

    public struct ArchiveCdnSettings: AWSEncodableShape & AWSDecodableShape {
        public let archiveS3Settings: ArchiveS3Settings?

        @inlinable
        public init(archiveS3Settings: ArchiveS3Settings? = nil) {
            self.archiveS3Settings = archiveS3Settings
        }

        private enum CodingKeys: String, CodingKey {
            case archiveS3Settings = "archiveS3Settings"
        }
    }

    public struct ArchiveContainerSettings: AWSEncodableShape & AWSDecodableShape {
        public let m2tsSettings: M2tsSettings?
        public let rawSettings: RawSettings?

        @inlinable
        public init(m2tsSettings: M2tsSettings? = nil, rawSettings: RawSettings? = nil) {
            self.m2tsSettings = m2tsSettings
            self.rawSettings = rawSettings
        }

        public func validate(name: String) throws {
            try self.m2tsSettings?.validate(name: "\(name).m2tsSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case m2tsSettings = "m2tsSettings"
            case rawSettings = "rawSettings"
        }
    }

    public struct ArchiveGroupSettings: AWSEncodableShape & AWSDecodableShape {
        /// Parameters that control interactions with the CDN.
        public let archiveCdnSettings: ArchiveCdnSettings?
        /// A directory and base filename where archive files should be written.
        public let destination: OutputLocationRef?
        /// Number of seconds to write to archive file before closing and starting a new one.
        public let rolloverInterval: Int?

        @inlinable
        public init(archiveCdnSettings: ArchiveCdnSettings? = nil, destination: OutputLocationRef? = nil, rolloverInterval: Int? = nil) {
            self.archiveCdnSettings = archiveCdnSettings
            self.destination = destination
            self.rolloverInterval = rolloverInterval
        }

        public func validate(name: String) throws {
            try self.validate(self.rolloverInterval, name: "rolloverInterval", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case archiveCdnSettings = "archiveCdnSettings"
            case destination = "destination"
            case rolloverInterval = "rolloverInterval"
        }
    }

    public struct ArchiveOutputSettings: AWSEncodableShape & AWSDecodableShape {
        /// Container for this output. Can be auto-detected from extension field.
        public let containerSettings: ArchiveContainerSettings?
        /// Output file extension. If excluded, this will be auto-selected from the container type.
        public let `extension`: String?
        /// String concatenated to the end of the destination filename.  Required for multiple outputs of the same type.
        public let nameModifier: String?

        @inlinable
        public init(containerSettings: ArchiveContainerSettings? = nil, extension: String? = nil, nameModifier: String? = nil) {
            self.containerSettings = containerSettings
            self.`extension` = `extension`
            self.nameModifier = nameModifier
        }

        public func validate(name: String) throws {
            try self.containerSettings?.validate(name: "\(name).containerSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case containerSettings = "containerSettings"
            case `extension` = "extension"
            case nameModifier = "nameModifier"
        }
    }

    public struct ArchiveS3Settings: AWSEncodableShape & AWSDecodableShape {
        /// Specify the canned ACL to apply to each S3 request. Defaults to none.
        public let cannedAcl: S3CannedAcl?

        @inlinable
        public init(cannedAcl: S3CannedAcl? = nil) {
            self.cannedAcl = cannedAcl
        }

        private enum CodingKeys: String, CodingKey {
            case cannedAcl = "cannedAcl"
        }
    }

    public struct AribDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct AribSourceSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct AudioChannelMapping: AWSEncodableShape & AWSDecodableShape {
        /// Indices and gain values for each input channel that should be remixed into this output channel.
        public let inputChannelLevels: [InputChannelLevel]?
        /// The index of the output channel being produced.
        public let outputChannel: Int?

        @inlinable
        public init(inputChannelLevels: [InputChannelLevel]? = nil, outputChannel: Int? = nil) {
            self.inputChannelLevels = inputChannelLevels
            self.outputChannel = outputChannel
        }

        public func validate(name: String) throws {
            try self.inputChannelLevels?.forEach {
                try $0.validate(name: "\(name).inputChannelLevels[]")
            }
            try self.validate(self.outputChannel, name: "outputChannel", parent: name, max: 7)
            try self.validate(self.outputChannel, name: "outputChannel", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case inputChannelLevels = "inputChannelLevels"
            case outputChannel = "outputChannel"
        }
    }

    public struct AudioCodecSettings: AWSEncodableShape & AWSDecodableShape {
        public let aacSettings: AacSettings?
        public let ac3Settings: Ac3Settings?
        public let eac3AtmosSettings: Eac3AtmosSettings?
        public let eac3Settings: Eac3Settings?
        public let mp2Settings: Mp2Settings?
        public let passThroughSettings: PassThroughSettings?
        public let wavSettings: WavSettings?

        @inlinable
        public init(aacSettings: AacSettings? = nil, ac3Settings: Ac3Settings? = nil, eac3AtmosSettings: Eac3AtmosSettings? = nil, eac3Settings: Eac3Settings? = nil, mp2Settings: Mp2Settings? = nil, passThroughSettings: PassThroughSettings? = nil, wavSettings: WavSettings? = nil) {
            self.aacSettings = aacSettings
            self.ac3Settings = ac3Settings
            self.eac3AtmosSettings = eac3AtmosSettings
            self.eac3Settings = eac3Settings
            self.mp2Settings = mp2Settings
            self.passThroughSettings = passThroughSettings
            self.wavSettings = wavSettings
        }

        public func validate(name: String) throws {
            try self.ac3Settings?.validate(name: "\(name).ac3Settings")
            try self.eac3AtmosSettings?.validate(name: "\(name).eac3AtmosSettings")
            try self.eac3Settings?.validate(name: "\(name).eac3Settings")
        }

        private enum CodingKeys: String, CodingKey {
            case aacSettings = "aacSettings"
            case ac3Settings = "ac3Settings"
            case eac3AtmosSettings = "eac3AtmosSettings"
            case eac3Settings = "eac3Settings"
            case mp2Settings = "mp2Settings"
            case passThroughSettings = "passThroughSettings"
            case wavSettings = "wavSettings"
        }
    }

    public struct AudioDescription: AWSEncodableShape & AWSDecodableShape {
        /// Identifies the DASH roles to assign to this audio output. Applies only when the audio output is configured for DVB DASH accessibility signaling.
        public let audioDashRoles: [DashRoleAudio]?
        /// Advanced audio normalization settings.
        public let audioNormalizationSettings: AudioNormalizationSettings?
        /// The name of the AudioSelector used as the source for this AudioDescription.
        public let audioSelectorName: String?
        /// Applies only if audioTypeControl is useConfigured. The values for audioType are defined in ISO-IEC 13818-1.
        public let audioType: AudioType?
        /// Determines how audio type is determined. followInput: If the input contains an ISO 639 audioType, then that value is passed through to the output. If the input contains no ISO 639 audioType, the value in Audio Type is included in the output. useConfigured: The value in Audio Type is included in the output.
        /// Note that this field and audioType are both ignored if inputType is broadcasterMixedAd.
        public let audioTypeControl: AudioDescriptionAudioTypeControl?
        /// Settings to configure one or more solutions that insert audio watermarks in the audio encode
        public let audioWatermarkingSettings: AudioWatermarkSettings?
        /// Audio codec settings.
        public let codecSettings: AudioCodecSettings?
        /// Identifies DVB DASH accessibility signaling in this audio output. Used in Microsoft Smooth Streaming outputs to signal accessibility information to packagers.
        public let dvbDashAccessibility: DvbDashAccessibility?
        /// RFC 5646 language code representing the language of the audio output track. Only used if languageControlMode is useConfigured, or there is no ISO 639 language code specified in the input.
        public let languageCode: String?
        /// Choosing followInput will cause the ISO 639 language code of the output to follow the ISO 639 language code of the input. The languageCode will be used when useConfigured is set, or when followInput is selected but there is no ISO 639 language code specified by the input.
        public let languageCodeControl: AudioDescriptionLanguageCodeControl?
        /// The name of this AudioDescription. Outputs will use this name to uniquely identify this AudioDescription.  Description names should be unique within this Live Event.
        public let name: String?
        /// Settings that control how input audio channels are remixed into the output audio channels.
        public let remixSettings: RemixSettings?
        /// Used for MS Smooth and Apple HLS outputs. Indicates the name displayed by the player (eg. English, or Director Commentary).
        public let streamName: String?

        @inlinable
        public init(audioDashRoles: [DashRoleAudio]? = nil, audioNormalizationSettings: AudioNormalizationSettings? = nil, audioSelectorName: String? = nil, audioType: AudioType? = nil, audioTypeControl: AudioDescriptionAudioTypeControl? = nil, audioWatermarkingSettings: AudioWatermarkSettings? = nil, codecSettings: AudioCodecSettings? = nil, dvbDashAccessibility: DvbDashAccessibility? = nil, languageCode: String? = nil, languageCodeControl: AudioDescriptionLanguageCodeControl? = nil, name: String? = nil, remixSettings: RemixSettings? = nil, streamName: String? = nil) {
            self.audioDashRoles = audioDashRoles
            self.audioNormalizationSettings = audioNormalizationSettings
            self.audioSelectorName = audioSelectorName
            self.audioType = audioType
            self.audioTypeControl = audioTypeControl
            self.audioWatermarkingSettings = audioWatermarkingSettings
            self.codecSettings = codecSettings
            self.dvbDashAccessibility = dvbDashAccessibility
            self.languageCode = languageCode
            self.languageCodeControl = languageCodeControl
            self.name = name
            self.remixSettings = remixSettings
            self.streamName = streamName
        }

        public func validate(name: String) throws {
            try self.audioWatermarkingSettings?.validate(name: "\(name).audioWatermarkingSettings")
            try self.codecSettings?.validate(name: "\(name).codecSettings")
            try self.validate(self.languageCode, name: "languageCode", parent: name, max: 35)
            try self.validate(self.languageCode, name: "languageCode", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, max: 255)
            try self.remixSettings?.validate(name: "\(name).remixSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case audioDashRoles = "audioDashRoles"
            case audioNormalizationSettings = "audioNormalizationSettings"
            case audioSelectorName = "audioSelectorName"
            case audioType = "audioType"
            case audioTypeControl = "audioTypeControl"
            case audioWatermarkingSettings = "audioWatermarkingSettings"
            case codecSettings = "codecSettings"
            case dvbDashAccessibility = "dvbDashAccessibility"
            case languageCode = "languageCode"
            case languageCodeControl = "languageCodeControl"
            case name = "name"
            case remixSettings = "remixSettings"
            case streamName = "streamName"
        }
    }

    public struct AudioDolbyEDecode: AWSEncodableShape & AWSDecodableShape {
        /// Applies only to Dolby E. Enter the program ID (according to the metadata in the audio) of the Dolby E program to extract from the specified track. One program extracted per audio selector. To select multiple programs, create multiple selectors with the same Track and different Program numbers. “All channels” means to ignore the program IDs and include all the channels in this selector; useful if metadata is known to be incorrect.
        public let programSelection: DolbyEProgramSelection?

        @inlinable
        public init(programSelection: DolbyEProgramSelection? = nil) {
            self.programSelection = programSelection
        }

        private enum CodingKeys: String, CodingKey {
            case programSelection = "programSelection"
        }
    }

    public struct AudioHlsRenditionSelection: AWSEncodableShape & AWSDecodableShape {
        /// Specifies the GROUP-ID in the #EXT-X-MEDIA tag of the target HLS audio rendition.
        public let groupId: String?
        /// Specifies the NAME in the #EXT-X-MEDIA tag of the target HLS audio rendition.
        public let name: String?

        @inlinable
        public init(groupId: String? = nil, name: String? = nil) {
            self.groupId = groupId
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.groupId, name: "groupId", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case groupId = "groupId"
            case name = "name"
        }
    }

    public struct AudioLanguageSelection: AWSEncodableShape & AWSDecodableShape {
        /// Selects a specific three-letter language code from within an audio source.
        public let languageCode: String?
        /// When set to "strict", the transport stream demux strictly identifies audio streams by their language descriptor. If a PMT update occurs such that an audio stream matching the initially selected language is no longer present then mute will be encoded until the language returns. If "loose", then on a PMT update the demux will choose another audio stream in the program with the same stream type if it can't find one with the same language.
        public let languageSelectionPolicy: AudioLanguageSelectionPolicy?

        @inlinable
        public init(languageCode: String? = nil, languageSelectionPolicy: AudioLanguageSelectionPolicy? = nil) {
            self.languageCode = languageCode
            self.languageSelectionPolicy = languageSelectionPolicy
        }

        private enum CodingKeys: String, CodingKey {
            case languageCode = "languageCode"
            case languageSelectionPolicy = "languageSelectionPolicy"
        }
    }

    public struct AudioNormalizationSettings: AWSEncodableShape & AWSDecodableShape {
        /// Audio normalization algorithm to use. itu17701 conforms to the CALM Act specification, itu17702 conforms to the EBU R-128 specification.
        public let algorithm: AudioNormalizationAlgorithm?
        /// When set to correctAudio the output audio is corrected using the chosen algorithm. If set to measureOnly, the audio will be measured but not adjusted.
        public let algorithmControl: AudioNormalizationAlgorithmControl?
        /// Target LKFS(loudness) to adjust volume to. If no value is entered, a default value will be used according to the chosen algorithm.  The CALM Act (1770-1) recommends a target of -24 LKFS. The EBU R-128 specification (1770-2) recommends a target of -23 LKFS.
        public let targetLkfs: Double?

        @inlinable
        public init(algorithm: AudioNormalizationAlgorithm? = nil, algorithmControl: AudioNormalizationAlgorithmControl? = nil, targetLkfs: Double? = nil) {
            self.algorithm = algorithm
            self.algorithmControl = algorithmControl
            self.targetLkfs = targetLkfs
        }

        private enum CodingKeys: String, CodingKey {
            case algorithm = "algorithm"
            case algorithmControl = "algorithmControl"
            case targetLkfs = "targetLkfs"
        }
    }

    public struct AudioOnlyHlsSettings: AWSEncodableShape & AWSDecodableShape {
        /// Specifies the group to which the audio Rendition belongs.
        public let audioGroupId: String?
        /// Optional. Specifies the .jpg or .png image to use as the cover art for an audio-only output. We recommend a low bit-size file because the image increases the output audio bandwidth.
        /// The image is attached to the audio as an ID3 tag, frame type APIC, picture type 0x10, as per the "ID3 tag version 2.4.0 - Native Frames" standard.
        public let audioOnlyImage: InputLocation?
        /// Four types of audio-only tracks are supported:
        /// Audio-Only Variant Stream
        /// The client can play back this audio-only stream instead of video in low-bandwidth scenarios. Represented as an EXT-X-STREAM-INF in the HLS manifest.
        /// Alternate Audio, Auto Select, Default
        /// Alternate rendition that the client should try to play back by default. Represented as an EXT-X-MEDIA in the HLS manifest with DEFAULT=YES, AUTOSELECT=YES
        /// Alternate Audio, Auto Select, Not Default
        /// Alternate rendition that the client may try to play back by default. Represented as an EXT-X-MEDIA in the HLS manifest with DEFAULT=NO, AUTOSELECT=YES
        /// Alternate Audio, not Auto Select
        /// Alternate rendition that the client will not try to play back by default. Represented as an EXT-X-MEDIA in the HLS manifest with DEFAULT=NO, AUTOSELECT=NO
        public let audioTrackType: AudioOnlyHlsTrackType?
        /// Specifies the segment type.
        public let segmentType: AudioOnlyHlsSegmentType?

        @inlinable
        public init(audioGroupId: String? = nil, audioOnlyImage: InputLocation? = nil, audioTrackType: AudioOnlyHlsTrackType? = nil, segmentType: AudioOnlyHlsSegmentType? = nil) {
            self.audioGroupId = audioGroupId
            self.audioOnlyImage = audioOnlyImage
            self.audioTrackType = audioTrackType
            self.segmentType = segmentType
        }

        public func validate(name: String) throws {
            try self.audioOnlyImage?.validate(name: "\(name).audioOnlyImage")
        }

        private enum CodingKeys: String, CodingKey {
            case audioGroupId = "audioGroupId"
            case audioOnlyImage = "audioOnlyImage"
            case audioTrackType = "audioTrackType"
            case segmentType = "segmentType"
        }
    }

    public struct AudioPidSelection: AWSEncodableShape & AWSDecodableShape {
        /// Selects a specific PID from within a source.
        public let pid: Int?

        @inlinable
        public init(pid: Int? = nil) {
            self.pid = pid
        }

        public func validate(name: String) throws {
            try self.validate(self.pid, name: "pid", parent: name, max: 8191)
            try self.validate(self.pid, name: "pid", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case pid = "pid"
        }
    }

    public struct AudioSelector: AWSEncodableShape & AWSDecodableShape {
        /// The name of this AudioSelector. AudioDescriptions will use this name to uniquely identify this Selector.  Selector names should be unique per input.
        public let name: String?
        /// The audio selector settings.
        public let selectorSettings: AudioSelectorSettings?

        @inlinable
        public init(name: String? = nil, selectorSettings: AudioSelectorSettings? = nil) {
            self.name = name
            self.selectorSettings = selectorSettings
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.selectorSettings?.validate(name: "\(name).selectorSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case name = "name"
            case selectorSettings = "selectorSettings"
        }
    }

    public struct AudioSelectorSettings: AWSEncodableShape & AWSDecodableShape {
        public let audioHlsRenditionSelection: AudioHlsRenditionSelection?
        public let audioLanguageSelection: AudioLanguageSelection?
        public let audioPidSelection: AudioPidSelection?
        public let audioTrackSelection: AudioTrackSelection?

        @inlinable
        public init(audioHlsRenditionSelection: AudioHlsRenditionSelection? = nil, audioLanguageSelection: AudioLanguageSelection? = nil, audioPidSelection: AudioPidSelection? = nil, audioTrackSelection: AudioTrackSelection? = nil) {
            self.audioHlsRenditionSelection = audioHlsRenditionSelection
            self.audioLanguageSelection = audioLanguageSelection
            self.audioPidSelection = audioPidSelection
            self.audioTrackSelection = audioTrackSelection
        }

        public func validate(name: String) throws {
            try self.audioHlsRenditionSelection?.validate(name: "\(name).audioHlsRenditionSelection")
            try self.audioPidSelection?.validate(name: "\(name).audioPidSelection")
            try self.audioTrackSelection?.validate(name: "\(name).audioTrackSelection")
        }

        private enum CodingKeys: String, CodingKey {
            case audioHlsRenditionSelection = "audioHlsRenditionSelection"
            case audioLanguageSelection = "audioLanguageSelection"
            case audioPidSelection = "audioPidSelection"
            case audioTrackSelection = "audioTrackSelection"
        }
    }

    public struct AudioSilenceFailoverSettings: AWSEncodableShape & AWSDecodableShape {
        /// The name of the audio selector in the input that MediaLive should monitor to detect silence. Select your most important rendition. If you didn't create an audio selector in this input, leave blank.
        public let audioSelectorName: String?
        /// The amount of time (in milliseconds) that the active input must be silent before automatic input failover occurs. Silence is defined as audio loss or audio quieter than -50 dBFS.
        public let audioSilenceThresholdMsec: Int?

        @inlinable
        public init(audioSelectorName: String? = nil, audioSilenceThresholdMsec: Int? = nil) {
            self.audioSelectorName = audioSelectorName
            self.audioSilenceThresholdMsec = audioSilenceThresholdMsec
        }

        public func validate(name: String) throws {
            try self.validate(self.audioSilenceThresholdMsec, name: "audioSilenceThresholdMsec", parent: name, min: 1000)
        }

        private enum CodingKeys: String, CodingKey {
            case audioSelectorName = "audioSelectorName"
            case audioSilenceThresholdMsec = "audioSilenceThresholdMsec"
        }
    }

    public struct AudioTrack: AWSEncodableShape & AWSDecodableShape {
        /// 1-based integer value that maps to a specific audio track
        public let track: Int?

        @inlinable
        public init(track: Int? = nil) {
            self.track = track
        }

        public func validate(name: String) throws {
            try self.validate(self.track, name: "track", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case track = "track"
        }
    }

    public struct AudioTrackSelection: AWSEncodableShape & AWSDecodableShape {
        /// Configure decoding options for Dolby E streams - these should be Dolby E frames carried in PCM streams tagged with SMPTE-337
        public let dolbyEDecode: AudioDolbyEDecode?
        /// Selects one or more unique audio tracks from within a source.
        public let tracks: [AudioTrack]?

        @inlinable
        public init(dolbyEDecode: AudioDolbyEDecode? = nil, tracks: [AudioTrack]? = nil) {
            self.dolbyEDecode = dolbyEDecode
            self.tracks = tracks
        }

        public func validate(name: String) throws {
            try self.tracks?.forEach {
                try $0.validate(name: "\(name).tracks[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case dolbyEDecode = "dolbyEDecode"
            case tracks = "tracks"
        }
    }

    public struct AudioWatermarkSettings: AWSEncodableShape & AWSDecodableShape {
        /// Settings to configure Nielsen Watermarks in the audio encode
        public let nielsenWatermarksSettings: NielsenWatermarksSettings?

        @inlinable
        public init(nielsenWatermarksSettings: NielsenWatermarksSettings? = nil) {
            self.nielsenWatermarksSettings = nielsenWatermarksSettings
        }

        public func validate(name: String) throws {
            try self.nielsenWatermarksSettings?.validate(name: "\(name).nielsenWatermarksSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case nielsenWatermarksSettings = "nielsenWatermarksSettings"
        }
    }

    public struct AutomaticInputFailoverSettings: AWSEncodableShape & AWSDecodableShape {
        /// This clear time defines the requirement a recovered input must meet to be considered healthy. The input must have no failover conditions for this length of time. Enter a time in milliseconds. This value is particularly important if the input_preference for the failover pair is set to PRIMARY_INPUT_PREFERRED, because after this time, MediaLive will switch back to the primary input.
        public let errorClearTimeMsec: Int?
        /// A list of failover conditions. If any of these conditions occur, MediaLive will perform a failover to the other input.
        public let failoverConditions: [FailoverCondition]?
        /// Input preference when deciding which input to make active when a previously failed input has recovered.
        public let inputPreference: InputPreference?
        /// The input ID of the secondary input in the automatic input failover pair.
        public let secondaryInputId: String?

        @inlinable
        public init(errorClearTimeMsec: Int? = nil, failoverConditions: [FailoverCondition]? = nil, inputPreference: InputPreference? = nil, secondaryInputId: String? = nil) {
            self.errorClearTimeMsec = errorClearTimeMsec
            self.failoverConditions = failoverConditions
            self.inputPreference = inputPreference
            self.secondaryInputId = secondaryInputId
        }

        public func validate(name: String) throws {
            try self.validate(self.errorClearTimeMsec, name: "errorClearTimeMsec", parent: name, min: 1)
            try self.failoverConditions?.forEach {
                try $0.validate(name: "\(name).failoverConditions[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case errorClearTimeMsec = "errorClearTimeMsec"
            case failoverConditions = "failoverConditions"
            case inputPreference = "inputPreference"
            case secondaryInputId = "secondaryInputId"
        }
    }

    public struct Av1ColorSpaceSettings: AWSEncodableShape & AWSDecodableShape {
        public let colorSpacePassthroughSettings: ColorSpacePassthroughSettings?
        public let hdr10Settings: Hdr10Settings?
        public let rec601Settings: Rec601Settings?
        public let rec709Settings: Rec709Settings?

        @inlinable
        public init(colorSpacePassthroughSettings: ColorSpacePassthroughSettings? = nil, hdr10Settings: Hdr10Settings? = nil, rec601Settings: Rec601Settings? = nil, rec709Settings: Rec709Settings? = nil) {
            self.colorSpacePassthroughSettings = colorSpacePassthroughSettings
            self.hdr10Settings = hdr10Settings
            self.rec601Settings = rec601Settings
            self.rec709Settings = rec709Settings
        }

        public func validate(name: String) throws {
            try self.hdr10Settings?.validate(name: "\(name).hdr10Settings")
        }

        private enum CodingKeys: String, CodingKey {
            case colorSpacePassthroughSettings = "colorSpacePassthroughSettings"
            case hdr10Settings = "hdr10Settings"
            case rec601Settings = "rec601Settings"
            case rec709Settings = "rec709Settings"
        }
    }

    public struct Av1Settings: AWSEncodableShape & AWSDecodableShape {
        /// Configures whether MediaLive will write AFD values into the video.
        /// AUTO: MediaLive will try to preserve the input AFD value (in cases where multiple AFD values are valid).
        /// FIXED: the AFD value will be the value configured in the fixedAfd parameter.
        /// NONE: MediaLive won't write AFD into the video
        public let afdSignaling: AfdSignaling?
        /// Average bitrate in bits/second. Required when the rate control mode is CBR. Not used for QVBR.
        public let bitrate: Int?
        /// The size of the buffer (HRD buffer model) in bits.
        public let bufSize: Int?
        /// Specify the type of color space to apply or choose to pass through. The default is to pass through the color space that is in the source.
        public let colorSpaceSettings: Av1ColorSpaceSettings?
        /// Complete this property only if you set the afdSignaling property to FIXED. Choose the AFD value (4 bits) to write on all frames of the video encode.
        public let fixedAfd: FixedAfd?
        /// The denominator for the framerate. Framerate is a fraction, for example, 24000 / 1001.
        public let framerateDenominator: Int?
        /// The numerator for the framerate. Framerate is a fraction, for example, 24000 / 1001.
        public let framerateNumerator: Int?
        /// The GOP size (keyframe interval).
        /// If GopSizeUnits is frames, GopSize must be a whole number and must be greater than or equal to 1.
        /// If GopSizeUnits is seconds, GopSize must be greater than 0, but it can be a decimal.
        public let gopSize: Double?
        /// Choose the units for the GOP size: FRAMES or SECONDS. For SECONDS, MediaLive converts the size into a frame count at run time.
        public let gopSizeUnits: Av1GopSizeUnits?
        /// Sets the level. This parameter is one of the properties of the encoding scheme for AV1.
        public let level: Av1Level?
        /// Sets the amount of lookahead. A value of LOW can decrease latency and memory usage. A value of HIGH can produce better quality for certain content.
        public let lookAheadRateControl: Av1LookAheadRateControl?
        /// The maximum bitrate to assign.
        /// For recommendations, see the description for qvbrQualityLevel.
        public let maxBitrate: Int?
        /// Used for QVBR rate control mode only.
        /// Optional.
        /// Enter a minimum bitrate if you want to keep the output bitrate about a threshold, in order to prevent the downstream system from de-allocating network bandwidth for this output.
        public let minBitrate: Int?
        /// Applies only if you enable SceneChangeDetect. Sets the interval between frames. This property ensures a minimum separation between repeated (cadence) I-frames and any I-frames inserted by scene change detection (SCD frames).
        /// Enter a number for the interval, measured in number of frames.
        /// If an SCD frame and a cadence frame are closer than the specified number of frames, MediaLive shrinks or stretches the GOP to include the SCD frame. Then normal cadence resumes in the next GOP. For GOP stretch to succeed, you must enable LookAheadRateControl.
        /// Note that the maximum GOP stretch = (GOP size) + (Minimum I-interval) - 1
        public let minIInterval: Int?
        /// The denominator for the output pixel aspect ratio (PAR).
        public let parDenominator: Int?
        /// The numerator for the output pixel aspect ratio (PAR).
        public let parNumerator: Int?
        /// Controls the target quality for the video encode. With QVBR rate control mode, the final quality is the target quality, constrained by the maxBitrate.
        /// Set values for the qvbrQualityLevel property and maxBitrate property that suit your most important viewing devices.
        /// To let MediaLive set the quality level (AUTO mode), leave the qvbrQualityLevel field empty. In this case, MediaLive uses the maximum bitrate, and the quality follows from that: more complex content might have a lower quality.
        /// Or set a target quality level and a maximum bitrate. With more complex content, MediaLive will try to achieve the target quality, but it won't exceed the maximum bitrate. With less complex content, This option will use only the bitrate needed to reach the target quality.
        /// Recommended values are:
        /// Primary screen: qvbrQualityLevel: Leave empty. maxBitrate: 4,000,000
        /// PC or tablet: qvbrQualityLevel: Leave empty. maxBitrate: 1,500,000 to 3,000,000
        /// Smartphone: qvbrQualityLevel: Leave empty. maxBitrate: 1,000,000 to 1,500,000
        public let qvbrQualityLevel: Int?
        /// Rate control mode.
        /// QVBR: Quality will match the specified quality level except when it is constrained by the
        /// maximum bitrate.  Recommended if you or your viewers pay for bandwidth.
        /// CBR: Quality varies, depending on the video complexity. Recommended only if you distribute
        /// your assets to devices that cannot handle variable bitrates.
        public let rateControlMode: Av1RateControlMode?
        /// Controls whether MediaLive inserts I-frames when it detects a scene change. ENABLED or DISABLED.
        public let sceneChangeDetect: Av1SceneChangeDetect?
        /// Configures the timecode burn-in feature. If you enable this feature, the timecode will become part of the video.
        public let timecodeBurninSettings: TimecodeBurninSettings?

        @inlinable
        public init(afdSignaling: AfdSignaling? = nil, bitrate: Int? = nil, bufSize: Int? = nil, colorSpaceSettings: Av1ColorSpaceSettings? = nil, fixedAfd: FixedAfd? = nil, framerateDenominator: Int? = nil, framerateNumerator: Int? = nil, gopSize: Double? = nil, gopSizeUnits: Av1GopSizeUnits? = nil, level: Av1Level? = nil, lookAheadRateControl: Av1LookAheadRateControl? = nil, maxBitrate: Int? = nil, minBitrate: Int? = nil, minIInterval: Int? = nil, parDenominator: Int? = nil, parNumerator: Int? = nil, qvbrQualityLevel: Int? = nil, rateControlMode: Av1RateControlMode? = nil, sceneChangeDetect: Av1SceneChangeDetect? = nil, timecodeBurninSettings: TimecodeBurninSettings? = nil) {
            self.afdSignaling = afdSignaling
            self.bitrate = bitrate
            self.bufSize = bufSize
            self.colorSpaceSettings = colorSpaceSettings
            self.fixedAfd = fixedAfd
            self.framerateDenominator = framerateDenominator
            self.framerateNumerator = framerateNumerator
            self.gopSize = gopSize
            self.gopSizeUnits = gopSizeUnits
            self.level = level
            self.lookAheadRateControl = lookAheadRateControl
            self.maxBitrate = maxBitrate
            self.minBitrate = minBitrate
            self.minIInterval = minIInterval
            self.parDenominator = parDenominator
            self.parNumerator = parNumerator
            self.qvbrQualityLevel = qvbrQualityLevel
            self.rateControlMode = rateControlMode
            self.sceneChangeDetect = sceneChangeDetect
            self.timecodeBurninSettings = timecodeBurninSettings
        }

        public func validate(name: String) throws {
            try self.validate(self.bitrate, name: "bitrate", parent: name, max: 12000000)
            try self.validate(self.bitrate, name: "bitrate", parent: name, min: 50000)
            try self.validate(self.bufSize, name: "bufSize", parent: name, max: 24000000)
            try self.validate(self.bufSize, name: "bufSize", parent: name, min: 50000)
            try self.colorSpaceSettings?.validate(name: "\(name).colorSpaceSettings")
            try self.validate(self.framerateDenominator, name: "framerateDenominator", parent: name, max: 3003)
            try self.validate(self.framerateDenominator, name: "framerateDenominator", parent: name, min: 1)
            try self.validate(self.framerateNumerator, name: "framerateNumerator", parent: name, min: 1)
            try self.validate(self.maxBitrate, name: "maxBitrate", parent: name, max: 12000000)
            try self.validate(self.maxBitrate, name: "maxBitrate", parent: name, min: 50000)
            try self.validate(self.minBitrate, name: "minBitrate", parent: name, max: 8000000)
            try self.validate(self.minBitrate, name: "minBitrate", parent: name, min: 0)
            try self.validate(self.minIInterval, name: "minIInterval", parent: name, max: 30)
            try self.validate(self.minIInterval, name: "minIInterval", parent: name, min: 0)
            try self.validate(self.parDenominator, name: "parDenominator", parent: name, min: 1)
            try self.validate(self.parNumerator, name: "parNumerator", parent: name, min: 1)
            try self.validate(self.qvbrQualityLevel, name: "qvbrQualityLevel", parent: name, max: 10)
            try self.validate(self.qvbrQualityLevel, name: "qvbrQualityLevel", parent: name, min: 1)
            try self.timecodeBurninSettings?.validate(name: "\(name).timecodeBurninSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case afdSignaling = "afdSignaling"
            case bitrate = "bitrate"
            case bufSize = "bufSize"
            case colorSpaceSettings = "colorSpaceSettings"
            case fixedAfd = "fixedAfd"
            case framerateDenominator = "framerateDenominator"
            case framerateNumerator = "framerateNumerator"
            case gopSize = "gopSize"
            case gopSizeUnits = "gopSizeUnits"
            case level = "level"
            case lookAheadRateControl = "lookAheadRateControl"
            case maxBitrate = "maxBitrate"
            case minBitrate = "minBitrate"
            case minIInterval = "minIInterval"
            case parDenominator = "parDenominator"
            case parNumerator = "parNumerator"
            case qvbrQualityLevel = "qvbrQualityLevel"
            case rateControlMode = "rateControlMode"
            case sceneChangeDetect = "sceneChangeDetect"
            case timecodeBurninSettings = "timecodeBurninSettings"
        }
    }

    public struct AvailBlanking: AWSEncodableShape & AWSDecodableShape {
        /// Blanking image to be used. Leave empty for solid black. Only bmp and png images are supported.
        public let availBlankingImage: InputLocation?
        /// When set to enabled, causes video, audio and captions to be blanked when insertion metadata is added.
        public let state: AvailBlankingState?

        @inlinable
        public init(availBlankingImage: InputLocation? = nil, state: AvailBlankingState? = nil) {
            self.availBlankingImage = availBlankingImage
            self.state = state
        }

        public func validate(name: String) throws {
            try self.availBlankingImage?.validate(name: "\(name).availBlankingImage")
        }

        private enum CodingKeys: String, CodingKey {
            case availBlankingImage = "availBlankingImage"
            case state = "state"
        }
    }

    public struct AvailConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// Controls how SCTE-35 messages create cues. Splice Insert mode treats all segmentation signals traditionally. With Time Signal APOS mode only Time Signal Placement Opportunity and Break messages create segment breaks. With ESAM mode, signals are forwarded to an ESAM server for possible update.
        public let availSettings: AvailSettings?
        /// Configures whether SCTE 35 passthrough triggers segment breaks in all output groups that use segmented outputs. Insertion of a SCTE 35 message typically results in a segment break, in addition to the regular cadence of breaks. The segment breaks appear in video outputs, audio outputs, and captions outputs (if any).
        /// ALL_OUTPUT_GROUPS: Default. Insert the segment break in in all output groups that have segmented outputs. This is the legacy behavior.
        /// SCTE35_ENABLED_OUTPUT_GROUPS: Insert the segment break only in output groups that have SCTE 35 passthrough enabled. This is the recommended value, because it reduces unnecessary segment breaks.
        public let scte35SegmentationScope: Scte35SegmentationScope?

        @inlinable
        public init(availSettings: AvailSettings? = nil, scte35SegmentationScope: Scte35SegmentationScope? = nil) {
            self.availSettings = availSettings
            self.scte35SegmentationScope = scte35SegmentationScope
        }

        public func validate(name: String) throws {
            try self.availSettings?.validate(name: "\(name).availSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case availSettings = "availSettings"
            case scte35SegmentationScope = "scte35SegmentationScope"
        }
    }

    public struct AvailSettings: AWSEncodableShape & AWSDecodableShape {
        public let esam: Esam?
        public let scte35SpliceInsert: Scte35SpliceInsert?
        public let scte35TimeSignalApos: Scte35TimeSignalApos?

        @inlinable
        public init(esam: Esam? = nil, scte35SpliceInsert: Scte35SpliceInsert? = nil, scte35TimeSignalApos: Scte35TimeSignalApos? = nil) {
            self.esam = esam
            self.scte35SpliceInsert = scte35SpliceInsert
            self.scte35TimeSignalApos = scte35TimeSignalApos
        }

        public func validate(name: String) throws {
            try self.esam?.validate(name: "\(name).esam")
            try self.scte35SpliceInsert?.validate(name: "\(name).scte35SpliceInsert")
            try self.scte35TimeSignalApos?.validate(name: "\(name).scte35TimeSignalApos")
        }

        private enum CodingKeys: String, CodingKey {
            case esam = "esam"
            case scte35SpliceInsert = "scte35SpliceInsert"
            case scte35TimeSignalApos = "scte35TimeSignalApos"
        }
    }

    public struct BandwidthReductionFilterSettings: AWSEncodableShape & AWSDecodableShape {
        /// Configures the sharpening control, which is available when the bandwidth reduction filter is enabled. This
        /// control sharpens edges and contours, which produces a specific artistic effect that you might want.
        /// We recommend that you test each of the values (including DISABLED) to observe the sharpening effect on the
        /// content.
        public let postFilterSharpening: BandwidthReductionPostFilterSharpening?
        /// Enables the bandwidth reduction filter. The filter strengths range from 1 to 4. We recommend that you always
        /// enable this filter and use AUTO, to let MediaLive apply the optimum filtering for the context.
        public let strength: BandwidthReductionFilterStrength?

        @inlinable
        public init(postFilterSharpening: BandwidthReductionPostFilterSharpening? = nil, strength: BandwidthReductionFilterStrength? = nil) {
            self.postFilterSharpening = postFilterSharpening
            self.strength = strength
        }

        private enum CodingKeys: String, CodingKey {
            case postFilterSharpening = "postFilterSharpening"
            case strength = "strength"
        }
    }

    public struct BatchDeleteRequest: AWSEncodableShape {
        /// List of channel IDs
        public let channelIds: [String]?
        /// List of input IDs
        public let inputIds: [String]?
        /// List of input security group IDs
        public let inputSecurityGroupIds: [String]?
        /// List of multiplex IDs
        public let multiplexIds: [String]?

        @inlinable
        public init(channelIds: [String]? = nil, inputIds: [String]? = nil, inputSecurityGroupIds: [String]? = nil, multiplexIds: [String]? = nil) {
            self.channelIds = channelIds
            self.inputIds = inputIds
            self.inputSecurityGroupIds = inputSecurityGroupIds
            self.multiplexIds = multiplexIds
        }

        private enum CodingKeys: String, CodingKey {
            case channelIds = "channelIds"
            case inputIds = "inputIds"
            case inputSecurityGroupIds = "inputSecurityGroupIds"
            case multiplexIds = "multiplexIds"
        }
    }

    public struct BatchDeleteResponse: AWSDecodableShape {
        /// List of failed operations
        public let failed: [BatchFailedResultModel]?
        /// List of successful operations
        public let successful: [BatchSuccessfulResultModel]?

        @inlinable
        public init(failed: [BatchFailedResultModel]? = nil, successful: [BatchSuccessfulResultModel]? = nil) {
            self.failed = failed
            self.successful = successful
        }

        private enum CodingKeys: String, CodingKey {
            case failed = "failed"
            case successful = "successful"
        }
    }

    public struct BatchFailedResultModel: AWSDecodableShape {
        /// ARN of the resource
        public let arn: String?
        /// Error code for the failed operation
        public let code: String?
        /// ID of the resource
        public let id: String?
        /// Error message for the failed operation
        public let message: String?

        @inlinable
        public init(arn: String? = nil, code: String? = nil, id: String? = nil, message: String? = nil) {
            self.arn = arn
            self.code = code
            self.id = id
            self.message = message
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case code = "code"
            case id = "id"
            case message = "message"
        }
    }

    public struct BatchScheduleActionCreateRequest: AWSEncodableShape {
        /// A list of schedule actions to create.
        public let scheduleActions: [ScheduleAction]?

        @inlinable
        public init(scheduleActions: [ScheduleAction]? = nil) {
            self.scheduleActions = scheduleActions
        }

        public func validate(name: String) throws {
            try self.scheduleActions?.forEach {
                try $0.validate(name: "\(name).scheduleActions[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case scheduleActions = "scheduleActions"
        }
    }

    public struct BatchScheduleActionCreateResult: AWSDecodableShape {
        /// List of actions that have been created in the schedule.
        public let scheduleActions: [ScheduleAction]?

        @inlinable
        public init(scheduleActions: [ScheduleAction]? = nil) {
            self.scheduleActions = scheduleActions
        }

        private enum CodingKeys: String, CodingKey {
            case scheduleActions = "scheduleActions"
        }
    }

    public struct BatchScheduleActionDeleteRequest: AWSEncodableShape {
        /// A list of schedule actions to delete.
        public let actionNames: [String]?

        @inlinable
        public init(actionNames: [String]? = nil) {
            self.actionNames = actionNames
        }

        private enum CodingKeys: String, CodingKey {
            case actionNames = "actionNames"
        }
    }

    public struct BatchScheduleActionDeleteResult: AWSDecodableShape {
        /// List of actions that have been deleted from the schedule.
        public let scheduleActions: [ScheduleAction]?

        @inlinable
        public init(scheduleActions: [ScheduleAction]? = nil) {
            self.scheduleActions = scheduleActions
        }

        private enum CodingKeys: String, CodingKey {
            case scheduleActions = "scheduleActions"
        }
    }

    public struct BatchStartRequest: AWSEncodableShape {
        /// List of channel IDs
        public let channelIds: [String]?
        /// List of multiplex IDs
        public let multiplexIds: [String]?

        @inlinable
        public init(channelIds: [String]? = nil, multiplexIds: [String]? = nil) {
            self.channelIds = channelIds
            self.multiplexIds = multiplexIds
        }

        private enum CodingKeys: String, CodingKey {
            case channelIds = "channelIds"
            case multiplexIds = "multiplexIds"
        }
    }

    public struct BatchStartResponse: AWSDecodableShape {
        /// List of failed operations
        public let failed: [BatchFailedResultModel]?
        /// List of successful operations
        public let successful: [BatchSuccessfulResultModel]?

        @inlinable
        public init(failed: [BatchFailedResultModel]? = nil, successful: [BatchSuccessfulResultModel]? = nil) {
            self.failed = failed
            self.successful = successful
        }

        private enum CodingKeys: String, CodingKey {
            case failed = "failed"
            case successful = "successful"
        }
    }

    public struct BatchStopRequest: AWSEncodableShape {
        /// List of channel IDs
        public let channelIds: [String]?
        /// List of multiplex IDs
        public let multiplexIds: [String]?

        @inlinable
        public init(channelIds: [String]? = nil, multiplexIds: [String]? = nil) {
            self.channelIds = channelIds
            self.multiplexIds = multiplexIds
        }

        private enum CodingKeys: String, CodingKey {
            case channelIds = "channelIds"
            case multiplexIds = "multiplexIds"
        }
    }

    public struct BatchStopResponse: AWSDecodableShape {
        /// List of failed operations
        public let failed: [BatchFailedResultModel]?
        /// List of successful operations
        public let successful: [BatchSuccessfulResultModel]?

        @inlinable
        public init(failed: [BatchFailedResultModel]? = nil, successful: [BatchSuccessfulResultModel]? = nil) {
            self.failed = failed
            self.successful = successful
        }

        private enum CodingKeys: String, CodingKey {
            case failed = "failed"
            case successful = "successful"
        }
    }

    public struct BatchSuccessfulResultModel: AWSDecodableShape {
        /// ARN of the resource
        public let arn: String?
        /// ID of the resource
        public let id: String?
        /// Current state of the resource
        public let state: String?

        @inlinable
        public init(arn: String? = nil, id: String? = nil, state: String? = nil) {
            self.arn = arn
            self.id = id
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case id = "id"
            case state = "state"
        }
    }

    public struct BatchUpdateScheduleRequest: AWSEncodableShape {
        /// Id of the channel whose schedule is being updated.
        public let channelId: String
        /// Schedule actions to create in the schedule.
        public let creates: BatchScheduleActionCreateRequest?
        /// Schedule actions to delete from the schedule.
        public let deletes: BatchScheduleActionDeleteRequest?

        @inlinable
        public init(channelId: String, creates: BatchScheduleActionCreateRequest? = nil, deletes: BatchScheduleActionDeleteRequest? = nil) {
            self.channelId = channelId
            self.creates = creates
            self.deletes = deletes
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.channelId, key: "ChannelId")
            try container.encodeIfPresent(self.creates, forKey: .creates)
            try container.encodeIfPresent(self.deletes, forKey: .deletes)
        }

        public func validate(name: String) throws {
            try self.creates?.validate(name: "\(name).creates")
        }

        private enum CodingKeys: String, CodingKey {
            case creates = "creates"
            case deletes = "deletes"
        }
    }

    public struct BatchUpdateScheduleResponse: AWSDecodableShape {
        /// Schedule actions created in the schedule.
        public let creates: BatchScheduleActionCreateResult?
        /// Schedule actions deleted from the schedule.
        public let deletes: BatchScheduleActionDeleteResult?

        @inlinable
        public init(creates: BatchScheduleActionCreateResult? = nil, deletes: BatchScheduleActionDeleteResult? = nil) {
            self.creates = creates
            self.deletes = deletes
        }

        private enum CodingKeys: String, CodingKey {
            case creates = "creates"
            case deletes = "deletes"
        }
    }

    public struct BlackoutSlate: AWSEncodableShape & AWSDecodableShape {
        /// Blackout slate image to be used. Leave empty for solid black. Only bmp and png images are supported.
        public let blackoutSlateImage: InputLocation?
        /// Setting to enabled causes the encoder to blackout the video, audio, and captions, and raise the "Network Blackout Image" slate when an SCTE104/35 Network End Segmentation Descriptor is encountered. The blackout will be lifted when the Network Start Segmentation Descriptor is encountered. The Network End and Network Start descriptors must contain a network ID that matches the value entered in "Network ID".
        public let networkEndBlackout: BlackoutSlateNetworkEndBlackout?
        /// Path to local file to use as Network End Blackout image. Image will be scaled to fill the entire output raster.
        public let networkEndBlackoutImage: InputLocation?
        /// Provides Network ID that matches EIDR ID format (e.g., "10.XXXX/XXXX-XXXX-XXXX-XXXX-XXXX-C").
        public let networkId: String?
        /// When set to enabled, causes video, audio and captions to be blanked when indicated by program metadata.
        public let state: BlackoutSlateState?

        @inlinable
        public init(blackoutSlateImage: InputLocation? = nil, networkEndBlackout: BlackoutSlateNetworkEndBlackout? = nil, networkEndBlackoutImage: InputLocation? = nil, networkId: String? = nil, state: BlackoutSlateState? = nil) {
            self.blackoutSlateImage = blackoutSlateImage
            self.networkEndBlackout = networkEndBlackout
            self.networkEndBlackoutImage = networkEndBlackoutImage
            self.networkId = networkId
            self.state = state
        }

        public func validate(name: String) throws {
            try self.blackoutSlateImage?.validate(name: "\(name).blackoutSlateImage")
            try self.networkEndBlackoutImage?.validate(name: "\(name).networkEndBlackoutImage")
            try self.validate(self.networkId, name: "networkId", parent: name, max: 34)
            try self.validate(self.networkId, name: "networkId", parent: name, min: 34)
        }

        private enum CodingKeys: String, CodingKey {
            case blackoutSlateImage = "blackoutSlateImage"
            case networkEndBlackout = "networkEndBlackout"
            case networkEndBlackoutImage = "networkEndBlackoutImage"
            case networkId = "networkId"
            case state = "state"
        }
    }

    public struct BurnInDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        /// If no explicit xPosition or yPosition is provided, setting alignment to centered will place the captions at the bottom center of the output. Similarly, setting a left alignment will align captions to the bottom left of the output. If x and y positions are given in conjunction with the alignment parameter, the font will be justified (either left or centered) relative to those coordinates. Selecting "smart" justification will left-justify live subtitles and center-justify pre-recorded subtitles.  All burn-in and DVB-Sub font settings must match.
        public let alignment: BurnInAlignment?
        /// Specifies the color of the rectangle behind the captions.  All burn-in and DVB-Sub font settings must match.
        public let backgroundColor: BurnInBackgroundColor?
        /// Specifies the opacity of the background rectangle. 255 is opaque; 0 is transparent. Leaving this parameter out is equivalent to setting it to 0 (transparent).  All burn-in and DVB-Sub font settings must match.
        public let backgroundOpacity: Int?
        /// External font file used for caption burn-in. File extension must be 'ttf' or 'tte'.  Although the user can select output fonts for many different types of input captions,  embedded, STL and teletext sources use a strict grid system. Using external fonts with these caption sources could cause unexpected display of proportional fonts.  All burn-in and DVB-Sub font settings must match.
        public let font: InputLocation?
        /// Specifies the color of the burned-in captions.  This option is not valid for source captions that are STL, 608/embedded or teletext.  These source settings are already pre-defined by the caption stream.  All burn-in and DVB-Sub font settings must match.
        public let fontColor: BurnInFontColor?
        /// Specifies the opacity of the burned-in captions. 255 is opaque; 0 is transparent.  All burn-in and DVB-Sub font settings must match.
        public let fontOpacity: Int?
        /// Font resolution in DPI (dots per inch); default is 96 dpi.  All burn-in and DVB-Sub font settings must match.
        public let fontResolution: Int?
        /// When set to 'auto' fontSize will scale depending on the size of the output.  Giving a positive integer will specify the exact font size in points.  All burn-in and DVB-Sub font settings must match.
        public let fontSize: String?
        /// Specifies font outline color. This option is not valid for source captions that are either 608/embedded or teletext. These source settings are already pre-defined by the caption stream. All burn-in and DVB-Sub font settings must match.
        public let outlineColor: BurnInOutlineColor?
        /// Specifies font outline size in pixels. This option is not valid for source captions that are either 608/embedded or teletext. These source settings are already pre-defined by the caption stream. All burn-in and DVB-Sub font settings must match.
        public let outlineSize: Int?
        /// Specifies the color of the shadow cast by the captions.  All burn-in and DVB-Sub font settings must match.
        public let shadowColor: BurnInShadowColor?
        /// Specifies the opacity of the shadow. 255 is opaque; 0 is transparent. Leaving this parameter out is equivalent to setting it to 0 (transparent).  All burn-in and DVB-Sub font settings must match.
        public let shadowOpacity: Int?
        /// Specifies the horizontal offset of the shadow relative to the captions in pixels. A value of -2 would result in a shadow offset 2 pixels to the left.  All burn-in and DVB-Sub font settings must match.
        public let shadowXOffset: Int?
        /// Specifies the vertical offset of the shadow relative to the captions in pixels. A value of -2 would result in a shadow offset 2 pixels above the text.  All burn-in and DVB-Sub font settings must match.
        public let shadowYOffset: Int?
        /// Applies only when the input captions are Teletext and the output captions are DVB-Sub or Burn-In. Choose the number of lines for the captions bitmap. The captions bitmap is 700 wide × 576 high and will be laid over the video. For example, a value of 16 divides the bitmap into 16 lines, with each line 36 pixels high (16 × 36 = 576). The default is 24 (24 pixels high). Enter the same number in every encode in every output that converts the same Teletext source to DVB-Sub or Burn-in.
        public let subtitleRows: BurnInDestinationSubtitleRows?
        /// Controls whether a fixed grid size will be used to generate the output subtitles bitmap. Only applicable for Teletext inputs and DVB-Sub/Burn-in outputs.
        public let teletextGridControl: BurnInTeletextGridControl?
        /// Specifies the horizontal position of the caption relative to the left side of the output in pixels. A value of 10 would result in the captions starting 10 pixels from the left of the output. If no explicit xPosition is provided, the horizontal caption position will be determined by the alignment parameter.  All burn-in and DVB-Sub font settings must match.
        public let xPosition: Int?
        /// Specifies the vertical position of the caption relative to the top of the output in pixels. A value of 10 would result in the captions starting 10 pixels from the top of the output. If no explicit yPosition is provided, the caption will be positioned towards the bottom of the output.  All burn-in and DVB-Sub font settings must match.
        public let yPosition: Int?

        @inlinable
        public init(alignment: BurnInAlignment? = nil, backgroundColor: BurnInBackgroundColor? = nil, backgroundOpacity: Int? = nil, font: InputLocation? = nil, fontColor: BurnInFontColor? = nil, fontOpacity: Int? = nil, fontResolution: Int? = nil, fontSize: String? = nil, outlineColor: BurnInOutlineColor? = nil, outlineSize: Int? = nil, shadowColor: BurnInShadowColor? = nil, shadowOpacity: Int? = nil, shadowXOffset: Int? = nil, shadowYOffset: Int? = nil, subtitleRows: BurnInDestinationSubtitleRows? = nil, teletextGridControl: BurnInTeletextGridControl? = nil, xPosition: Int? = nil, yPosition: Int? = nil) {
            self.alignment = alignment
            self.backgroundColor = backgroundColor
            self.backgroundOpacity = backgroundOpacity
            self.font = font
            self.fontColor = fontColor
            self.fontOpacity = fontOpacity
            self.fontResolution = fontResolution
            self.fontSize = fontSize
            self.outlineColor = outlineColor
            self.outlineSize = outlineSize
            self.shadowColor = shadowColor
            self.shadowOpacity = shadowOpacity
            self.shadowXOffset = shadowXOffset
            self.shadowYOffset = shadowYOffset
            self.subtitleRows = subtitleRows
            self.teletextGridControl = teletextGridControl
            self.xPosition = xPosition
            self.yPosition = yPosition
        }

        public func validate(name: String) throws {
            try self.validate(self.backgroundOpacity, name: "backgroundOpacity", parent: name, max: 255)
            try self.validate(self.backgroundOpacity, name: "backgroundOpacity", parent: name, min: 0)
            try self.font?.validate(name: "\(name).font")
            try self.validate(self.fontOpacity, name: "fontOpacity", parent: name, max: 255)
            try self.validate(self.fontOpacity, name: "fontOpacity", parent: name, min: 0)
            try self.validate(self.fontResolution, name: "fontResolution", parent: name, max: 600)
            try self.validate(self.fontResolution, name: "fontResolution", parent: name, min: 96)
            try self.validate(self.outlineSize, name: "outlineSize", parent: name, max: 10)
            try self.validate(self.outlineSize, name: "outlineSize", parent: name, min: 0)
            try self.validate(self.shadowOpacity, name: "shadowOpacity", parent: name, max: 255)
            try self.validate(self.shadowOpacity, name: "shadowOpacity", parent: name, min: 0)
            try self.validate(self.xPosition, name: "xPosition", parent: name, min: 0)
            try self.validate(self.yPosition, name: "yPosition", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case alignment = "alignment"
            case backgroundColor = "backgroundColor"
            case backgroundOpacity = "backgroundOpacity"
            case font = "font"
            case fontColor = "fontColor"
            case fontOpacity = "fontOpacity"
            case fontResolution = "fontResolution"
            case fontSize = "fontSize"
            case outlineColor = "outlineColor"
            case outlineSize = "outlineSize"
            case shadowColor = "shadowColor"
            case shadowOpacity = "shadowOpacity"
            case shadowXOffset = "shadowXOffset"
            case shadowYOffset = "shadowYOffset"
            case subtitleRows = "subtitleRows"
            case teletextGridControl = "teletextGridControl"
            case xPosition = "xPosition"
            case yPosition = "yPosition"
        }
    }

    public struct CancelInputDeviceTransferRequest: AWSEncodableShape {
        /// The unique ID of the input device to cancel. For example, hd-123456789abcdef.
        public let inputDeviceId: String

        @inlinable
        public init(inputDeviceId: String) {
            self.inputDeviceId = inputDeviceId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.inputDeviceId, key: "InputDeviceId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct CancelInputDeviceTransferResponse: AWSDecodableShape {
        public init() {}
    }

    public struct CaptionDescription: AWSEncodableShape & AWSDecodableShape {
        /// Indicates whether the caption track implements accessibility features such as written descriptions of spoken dialog, music, and sounds. This signaling is added to HLS output group and MediaPackage output group.
        public let accessibility: AccessibilityType?
        /// Identifies the DASH roles to assign to this captions output. Applies only when the captions output is configured for DVB DASH accessibility signaling.
        public let captionDashRoles: [DashRoleCaption]?
        /// Specifies which input caption selector to use as a caption source when generating output captions. This field should match a captionSelector name.
        public let captionSelectorName: String?
        /// Additional settings for captions destination that depend on the destination type.
        public let destinationSettings: CaptionDestinationSettings?
        /// Identifies DVB DASH accessibility signaling in this captions output. Used in Microsoft Smooth Streaming outputs to signal accessibility information to packagers.
        public let dvbDashAccessibility: DvbDashAccessibility?
        /// ISO 639-2 three-digit code: http://www.loc.gov/standards/iso639-2/
        public let languageCode: String?
        /// Human readable information to indicate captions available for players (eg. English, or Spanish).
        public let languageDescription: String?
        /// Name of the caption description.  Used to associate a caption description with an output.  Names must be unique within an event.
        public let name: String?

        @inlinable
        public init(accessibility: AccessibilityType? = nil, captionDashRoles: [DashRoleCaption]? = nil, captionSelectorName: String? = nil, destinationSettings: CaptionDestinationSettings? = nil, dvbDashAccessibility: DvbDashAccessibility? = nil, languageCode: String? = nil, languageDescription: String? = nil, name: String? = nil) {
            self.accessibility = accessibility
            self.captionDashRoles = captionDashRoles
            self.captionSelectorName = captionSelectorName
            self.destinationSettings = destinationSettings
            self.dvbDashAccessibility = dvbDashAccessibility
            self.languageCode = languageCode
            self.languageDescription = languageDescription
            self.name = name
        }

        public func validate(name: String) throws {
            try self.destinationSettings?.validate(name: "\(name).destinationSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case accessibility = "accessibility"
            case captionDashRoles = "captionDashRoles"
            case captionSelectorName = "captionSelectorName"
            case destinationSettings = "destinationSettings"
            case dvbDashAccessibility = "dvbDashAccessibility"
            case languageCode = "languageCode"
            case languageDescription = "languageDescription"
            case name = "name"
        }
    }

    public struct CaptionDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        public let aribDestinationSettings: AribDestinationSettings?
        public let burnInDestinationSettings: BurnInDestinationSettings?
        public let dvbSubDestinationSettings: DvbSubDestinationSettings?
        public let ebuTtDDestinationSettings: EbuTtDDestinationSettings?
        public let embeddedDestinationSettings: EmbeddedDestinationSettings?
        public let embeddedPlusScte20DestinationSettings: EmbeddedPlusScte20DestinationSettings?
        public let rtmpCaptionInfoDestinationSettings: RtmpCaptionInfoDestinationSettings?
        public let scte20PlusEmbeddedDestinationSettings: Scte20PlusEmbeddedDestinationSettings?
        public let scte27DestinationSettings: Scte27DestinationSettings?
        public let smpteTtDestinationSettings: SmpteTtDestinationSettings?
        public let teletextDestinationSettings: TeletextDestinationSettings?
        public let ttmlDestinationSettings: TtmlDestinationSettings?
        public let webvttDestinationSettings: WebvttDestinationSettings?

        @inlinable
        public init(aribDestinationSettings: AribDestinationSettings? = nil, burnInDestinationSettings: BurnInDestinationSettings? = nil, dvbSubDestinationSettings: DvbSubDestinationSettings? = nil, ebuTtDDestinationSettings: EbuTtDDestinationSettings? = nil, embeddedDestinationSettings: EmbeddedDestinationSettings? = nil, embeddedPlusScte20DestinationSettings: EmbeddedPlusScte20DestinationSettings? = nil, rtmpCaptionInfoDestinationSettings: RtmpCaptionInfoDestinationSettings? = nil, scte20PlusEmbeddedDestinationSettings: Scte20PlusEmbeddedDestinationSettings? = nil, scte27DestinationSettings: Scte27DestinationSettings? = nil, smpteTtDestinationSettings: SmpteTtDestinationSettings? = nil, teletextDestinationSettings: TeletextDestinationSettings? = nil, ttmlDestinationSettings: TtmlDestinationSettings? = nil, webvttDestinationSettings: WebvttDestinationSettings? = nil) {
            self.aribDestinationSettings = aribDestinationSettings
            self.burnInDestinationSettings = burnInDestinationSettings
            self.dvbSubDestinationSettings = dvbSubDestinationSettings
            self.ebuTtDDestinationSettings = ebuTtDDestinationSettings
            self.embeddedDestinationSettings = embeddedDestinationSettings
            self.embeddedPlusScte20DestinationSettings = embeddedPlusScte20DestinationSettings
            self.rtmpCaptionInfoDestinationSettings = rtmpCaptionInfoDestinationSettings
            self.scte20PlusEmbeddedDestinationSettings = scte20PlusEmbeddedDestinationSettings
            self.scte27DestinationSettings = scte27DestinationSettings
            self.smpteTtDestinationSettings = smpteTtDestinationSettings
            self.teletextDestinationSettings = teletextDestinationSettings
            self.ttmlDestinationSettings = ttmlDestinationSettings
            self.webvttDestinationSettings = webvttDestinationSettings
        }

        public func validate(name: String) throws {
            try self.burnInDestinationSettings?.validate(name: "\(name).burnInDestinationSettings")
            try self.dvbSubDestinationSettings?.validate(name: "\(name).dvbSubDestinationSettings")
            try self.ebuTtDDestinationSettings?.validate(name: "\(name).ebuTtDDestinationSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case aribDestinationSettings = "aribDestinationSettings"
            case burnInDestinationSettings = "burnInDestinationSettings"
            case dvbSubDestinationSettings = "dvbSubDestinationSettings"
            case ebuTtDDestinationSettings = "ebuTtDDestinationSettings"
            case embeddedDestinationSettings = "embeddedDestinationSettings"
            case embeddedPlusScte20DestinationSettings = "embeddedPlusScte20DestinationSettings"
            case rtmpCaptionInfoDestinationSettings = "rtmpCaptionInfoDestinationSettings"
            case scte20PlusEmbeddedDestinationSettings = "scte20PlusEmbeddedDestinationSettings"
            case scte27DestinationSettings = "scte27DestinationSettings"
            case smpteTtDestinationSettings = "smpteTtDestinationSettings"
            case teletextDestinationSettings = "teletextDestinationSettings"
            case ttmlDestinationSettings = "ttmlDestinationSettings"
            case webvttDestinationSettings = "webvttDestinationSettings"
        }
    }

    public struct CaptionLanguageMapping: AWSEncodableShape & AWSDecodableShape {
        /// The closed caption channel being described by this CaptionLanguageMapping.  Each channel mapping must have a unique channel number (maximum of 4)
        public let captionChannel: Int?
        /// Three character ISO 639-2 language code (see http://www.loc.gov/standards/iso639-2)
        public let languageCode: String?
        /// Textual description of language
        public let languageDescription: String?

        @inlinable
        public init(captionChannel: Int? = nil, languageCode: String? = nil, languageDescription: String? = nil) {
            self.captionChannel = captionChannel
            self.languageCode = languageCode
            self.languageDescription = languageDescription
        }

        public func validate(name: String) throws {
            try self.validate(self.captionChannel, name: "captionChannel", parent: name, max: 4)
            try self.validate(self.captionChannel, name: "captionChannel", parent: name, min: 1)
            try self.validate(self.languageCode, name: "languageCode", parent: name, max: 3)
            try self.validate(self.languageCode, name: "languageCode", parent: name, min: 3)
            try self.validate(self.languageDescription, name: "languageDescription", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case captionChannel = "captionChannel"
            case languageCode = "languageCode"
            case languageDescription = "languageDescription"
        }
    }

    public struct CaptionRectangle: AWSEncodableShape & AWSDecodableShape {
        /// See the description in leftOffset.
        /// For height, specify the entire height of the rectangle as a percentage of the underlying frame height. For example, \"80\" means the rectangle height is 80% of the underlying frame height. The topOffset and rectangleHeight must add up to 100% or less.
        /// This field corresponds to tts:extent - Y in the TTML standard.
        public let height: Double?
        /// Applies only if you plan to convert these source captions to EBU-TT-D or TTML in an output. (Make sure to leave the default if you don't have either of these formats in the output.) You can define a display rectangle for the captions that is smaller than the underlying video frame. You define the rectangle by specifying the position of the left edge, top edge, bottom edge, and right edge of the rectangle, all within the underlying video frame. The units for the measurements are percentages.
        /// If you specify a value for one of these fields, you must specify a value for all of them.
        /// For leftOffset, specify the position of the left edge of the rectangle, as a percentage of the underlying frame width, and relative to the left edge of the frame. For example, \"10\" means the measurement is 10% of the underlying frame width. The rectangle left edge starts at that position from the left edge of the frame.
        /// This field corresponds to tts:origin - X in the TTML standard.
        public let leftOffset: Double?
        /// See the description in leftOffset.
        /// For topOffset, specify the position of the top edge of the rectangle, as a percentage of the underlying frame height, and relative to the top edge of the frame. For example, \"10\" means the measurement is 10% of the underlying frame height. The rectangle top edge starts at that position from the top edge of the frame.
        /// This field corresponds to tts:origin - Y in the TTML standard.
        public let topOffset: Double?
        /// See the description in leftOffset.
        /// For width, specify the entire width of the rectangle as a percentage of the underlying frame width. For example, \"80\" means the rectangle width is 80% of the underlying frame width. The leftOffset and rectangleWidth must add up to 100% or less.
        /// This field corresponds to tts:extent - X in the TTML standard.
        public let width: Double?

        @inlinable
        public init(height: Double? = nil, leftOffset: Double? = nil, topOffset: Double? = nil, width: Double? = nil) {
            self.height = height
            self.leftOffset = leftOffset
            self.topOffset = topOffset
            self.width = width
        }

        private enum CodingKeys: String, CodingKey {
            case height = "height"
            case leftOffset = "leftOffset"
            case topOffset = "topOffset"
            case width = "width"
        }
    }

    public struct CaptionSelector: AWSEncodableShape & AWSDecodableShape {
        /// When specified this field indicates the three letter language code of the caption track to extract from the source.
        public let languageCode: String?
        /// Name identifier for a caption selector.  This name is used to associate this caption selector with one or more caption descriptions.  Names must be unique within an event.
        public let name: String?
        /// Caption selector settings.
        public let selectorSettings: CaptionSelectorSettings?

        @inlinable
        public init(languageCode: String? = nil, name: String? = nil, selectorSettings: CaptionSelectorSettings? = nil) {
            self.languageCode = languageCode
            self.name = name
            self.selectorSettings = selectorSettings
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.selectorSettings?.validate(name: "\(name).selectorSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case languageCode = "languageCode"
            case name = "name"
            case selectorSettings = "selectorSettings"
        }
    }

    public struct CaptionSelectorSettings: AWSEncodableShape & AWSDecodableShape {
        public let ancillarySourceSettings: AncillarySourceSettings?
        public let aribSourceSettings: AribSourceSettings?
        public let dvbSubSourceSettings: DvbSubSourceSettings?
        public let embeddedSourceSettings: EmbeddedSourceSettings?
        public let scte20SourceSettings: Scte20SourceSettings?
        public let scte27SourceSettings: Scte27SourceSettings?
        public let teletextSourceSettings: TeletextSourceSettings?

        @inlinable
        public init(ancillarySourceSettings: AncillarySourceSettings? = nil, aribSourceSettings: AribSourceSettings? = nil, dvbSubSourceSettings: DvbSubSourceSettings? = nil, embeddedSourceSettings: EmbeddedSourceSettings? = nil, scte20SourceSettings: Scte20SourceSettings? = nil, scte27SourceSettings: Scte27SourceSettings? = nil, teletextSourceSettings: TeletextSourceSettings? = nil) {
            self.ancillarySourceSettings = ancillarySourceSettings
            self.aribSourceSettings = aribSourceSettings
            self.dvbSubSourceSettings = dvbSubSourceSettings
            self.embeddedSourceSettings = embeddedSourceSettings
            self.scte20SourceSettings = scte20SourceSettings
            self.scte27SourceSettings = scte27SourceSettings
            self.teletextSourceSettings = teletextSourceSettings
        }

        public func validate(name: String) throws {
            try self.ancillarySourceSettings?.validate(name: "\(name).ancillarySourceSettings")
            try self.dvbSubSourceSettings?.validate(name: "\(name).dvbSubSourceSettings")
            try self.embeddedSourceSettings?.validate(name: "\(name).embeddedSourceSettings")
            try self.scte20SourceSettings?.validate(name: "\(name).scte20SourceSettings")
            try self.scte27SourceSettings?.validate(name: "\(name).scte27SourceSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case ancillarySourceSettings = "ancillarySourceSettings"
            case aribSourceSettings = "aribSourceSettings"
            case dvbSubSourceSettings = "dvbSubSourceSettings"
            case embeddedSourceSettings = "embeddedSourceSettings"
            case scte20SourceSettings = "scte20SourceSettings"
            case scte27SourceSettings = "scte27SourceSettings"
            case teletextSourceSettings = "teletextSourceSettings"
        }
    }

    public struct CdiInputSpecification: AWSEncodableShape & AWSDecodableShape {
        /// Maximum CDI input resolution
        public let resolution: CdiInputResolution?

        @inlinable
        public init(resolution: CdiInputResolution? = nil) {
            self.resolution = resolution
        }

        private enum CodingKeys: String, CodingKey {
            case resolution = "resolution"
        }
    }

    public struct Channel: AWSDecodableShape {
        /// Anywhere settings for this channel.
        public let anywhereSettings: DescribeAnywhereSettings?
        /// The unique arn of the channel.
        public let arn: String?
        /// Specification of CDI inputs for this channel
        public let cdiInputSpecification: CdiInputSpecification?
        /// The class for this channel. STANDARD for a channel with two pipelines or SINGLE_PIPELINE for a channel with one pipeline.
        public let channelClass: ChannelClass?
        /// Requested engine version for this channel.
        public let channelEngineVersion: ChannelEngineVersionResponse?
        /// A list of destinations of the channel. For UDP outputs, there is one
        /// destination per output. For other types (HLS, for example), there is
        /// one destination per packager.
        public let destinations: [OutputDestination]?
        /// The endpoints where outgoing connections initiate from
        public let egressEndpoints: [ChannelEgressEndpoint]?
        public let encoderSettings: EncoderSettings?
        /// The unique id of the channel.
        public let id: String?
        /// List of input attachments for channel.
        public let inputAttachments: [InputAttachment]?
        /// Specification of network and file inputs for this channel
        public let inputSpecification: InputSpecification?
        /// The log level being written to CloudWatch Logs.
        public let logLevel: LogLevel?
        /// Maintenance settings for this channel.
        public let maintenance: MaintenanceStatus?
        /// The name of the channel. (user-mutable)
        public let name: String?
        /// Runtime details for the pipelines of a running channel.
        public let pipelineDetails: [PipelineDetail]?
        /// The number of currently healthy pipelines.
        public let pipelinesRunningCount: Int?
        /// The Amazon Resource Name (ARN) of the role assumed when running the Channel.
        public let roleArn: String?
        public let state: ChannelState?
        /// A collection of key-value pairs.
        public let tags: [String: String]?
        /// Settings for VPC output
        public let vpc: VpcOutputSettingsDescription?

        @inlinable
        public init(anywhereSettings: DescribeAnywhereSettings? = nil, arn: String? = nil, cdiInputSpecification: CdiInputSpecification? = nil, channelClass: ChannelClass? = nil, channelEngineVersion: ChannelEngineVersionResponse? = nil, destinations: [OutputDestination]? = nil, egressEndpoints: [ChannelEgressEndpoint]? = nil, encoderSettings: EncoderSettings? = nil, id: String? = nil, inputAttachments: [InputAttachment]? = nil, inputSpecification: InputSpecification? = nil, logLevel: LogLevel? = nil, maintenance: MaintenanceStatus? = nil, name: String? = nil, pipelineDetails: [PipelineDetail]? = nil, pipelinesRunningCount: Int? = nil, roleArn: String? = nil, state: ChannelState? = nil, tags: [String: String]? = nil, vpc: VpcOutputSettingsDescription? = nil) {
            self.anywhereSettings = anywhereSettings
            self.arn = arn
            self.cdiInputSpecification = cdiInputSpecification
            self.channelClass = channelClass
            self.channelEngineVersion = channelEngineVersion
            self.destinations = destinations
            self.egressEndpoints = egressEndpoints
            self.encoderSettings = encoderSettings
            self.id = id
            self.inputAttachments = inputAttachments
            self.inputSpecification = inputSpecification
            self.logLevel = logLevel
            self.maintenance = maintenance
            self.name = name
            self.pipelineDetails = pipelineDetails
            self.pipelinesRunningCount = pipelinesRunningCount
            self.roleArn = roleArn
            self.state = state
            self.tags = tags
            self.vpc = vpc
        }

        private enum CodingKeys: String, CodingKey {
            case anywhereSettings = "anywhereSettings"
            case arn = "arn"
            case cdiInputSpecification = "cdiInputSpecification"
            case channelClass = "channelClass"
            case channelEngineVersion = "channelEngineVersion"
            case destinations = "destinations"
            case egressEndpoints = "egressEndpoints"
            case encoderSettings = "encoderSettings"
            case id = "id"
            case inputAttachments = "inputAttachments"
            case inputSpecification = "inputSpecification"
            case logLevel = "logLevel"
            case maintenance = "maintenance"
            case name = "name"
            case pipelineDetails = "pipelineDetails"
            case pipelinesRunningCount = "pipelinesRunningCount"
            case roleArn = "roleArn"
            case state = "state"
            case tags = "tags"
            case vpc = "vpc"
        }
    }

    public struct ChannelEgressEndpoint: AWSDecodableShape {
        /// Public IP of where a channel's output comes from
        public let sourceIp: String?

        @inlinable
        public init(sourceIp: String? = nil) {
            self.sourceIp = sourceIp
        }

        private enum CodingKeys: String, CodingKey {
            case sourceIp = "sourceIp"
        }
    }

    public struct ChannelEngineVersionRequest: AWSEncodableShape {
        /// The build identifier of the engine version to use for this channel. Specify 'DEFAULT' to reset to the default version.
        public let version: String?

        @inlinable
        public init(version: String? = nil) {
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case version = "version"
        }
    }

    public struct ChannelEngineVersionResponse: AWSDecodableShape {
        /// The UTC time when the version expires.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var expirationDate: Date?
        /// The build identifier for this version of the channel version.
        public let version: String?

        @inlinable
        public init(expirationDate: Date? = nil, version: String? = nil) {
            self.expirationDate = expirationDate
            self.version = version
        }

        private enum CodingKeys: String, CodingKey {
            case expirationDate = "expirationDate"
            case version = "version"
        }
    }

    public struct ChannelSummary: AWSDecodableShape {
        /// AnywhereSettings settings for this channel.
        public let anywhereSettings: DescribeAnywhereSettings?
        /// The unique arn of the channel.
        public let arn: String?
        /// Specification of CDI inputs for this channel
        public let cdiInputSpecification: CdiInputSpecification?
        /// The class for this channel. STANDARD for a channel with two pipelines or SINGLE_PIPELINE for a channel with one pipeline.
        public let channelClass: ChannelClass?
        /// The engine version that you requested for this channel.
        public let channelEngineVersion: ChannelEngineVersionResponse?
        /// A list of destinations of the channel. For UDP outputs, there is one
        /// destination per output. For other types (HLS, for example), there is
        /// one destination per packager.
        public let destinations: [OutputDestination]?
        /// The endpoints where outgoing connections initiate from
        public let egressEndpoints: [ChannelEgressEndpoint]?
        /// The unique id of the channel.
        public let id: String?
        /// List of input attachments for channel.
        public let inputAttachments: [InputAttachment]?
        /// Specification of network and file inputs for this channel
        public let inputSpecification: InputSpecification?
        /// The log level being written to CloudWatch Logs.
        public let logLevel: LogLevel?
        /// Maintenance settings for this channel.
        public let maintenance: MaintenanceStatus?
        /// The name of the channel. (user-mutable)
        public let name: String?
        /// The number of currently healthy pipelines.
        public let pipelinesRunningCount: Int?
        /// The Amazon Resource Name (ARN) of the role assumed when running the Channel.
        public let roleArn: String?
        public let state: ChannelState?
        /// A collection of key-value pairs.
        public let tags: [String: String]?
        /// The engine version that the running pipelines are using.
        public let usedChannelEngineVersions: [ChannelEngineVersionResponse]?
        /// Settings for any VPC outputs.
        public let vpc: VpcOutputSettingsDescription?

        @inlinable
        public init(anywhereSettings: DescribeAnywhereSettings? = nil, arn: String? = nil, cdiInputSpecification: CdiInputSpecification? = nil, channelClass: ChannelClass? = nil, channelEngineVersion: ChannelEngineVersionResponse? = nil, destinations: [OutputDestination]? = nil, egressEndpoints: [ChannelEgressEndpoint]? = nil, id: String? = nil, inputAttachments: [InputAttachment]? = nil, inputSpecification: InputSpecification? = nil, logLevel: LogLevel? = nil, maintenance: MaintenanceStatus? = nil, name: String? = nil, pipelinesRunningCount: Int? = nil, roleArn: String? = nil, state: ChannelState? = nil, tags: [String: String]? = nil, usedChannelEngineVersions: [ChannelEngineVersionResponse]? = nil, vpc: VpcOutputSettingsDescription? = nil) {
            self.anywhereSettings = anywhereSettings
            self.arn = arn
            self.cdiInputSpecification = cdiInputSpecification
            self.channelClass = channelClass
            self.channelEngineVersion = channelEngineVersion
            self.destinations = destinations
            self.egressEndpoints = egressEndpoints
            self.id = id
            self.inputAttachments = inputAttachments
            self.inputSpecification = inputSpecification
            self.logLevel = logLevel
            self.maintenance = maintenance
            self.name = name
            self.pipelinesRunningCount = pipelinesRunningCount
            self.roleArn = roleArn
            self.state = state
            self.tags = tags
            self.usedChannelEngineVersions = usedChannelEngineVersions
            self.vpc = vpc
        }

        private enum CodingKeys: String, CodingKey {
            case anywhereSettings = "anywhereSettings"
            case arn = "arn"
            case cdiInputSpecification = "cdiInputSpecification"
            case channelClass = "channelClass"
            case channelEngineVersion = "channelEngineVersion"
            case destinations = "destinations"
            case egressEndpoints = "egressEndpoints"
            case id = "id"
            case inputAttachments = "inputAttachments"
            case inputSpecification = "inputSpecification"
            case logLevel = "logLevel"
            case maintenance = "maintenance"
            case name = "name"
            case pipelinesRunningCount = "pipelinesRunningCount"
            case roleArn = "roleArn"
            case state = "state"
            case tags = "tags"
            case usedChannelEngineVersions = "usedChannelEngineVersions"
            case vpc = "vpc"
        }
    }

    public struct ClaimDeviceRequest: AWSEncodableShape {
        /// The id of the device you want to claim.
        public let id: String?

        @inlinable
        public init(id: String? = nil) {
            self.id = id
        }

        private enum CodingKeys: String, CodingKey {
            case id = "id"
        }
    }

    public struct ClaimDeviceResponse: AWSDecodableShape {
        public init() {}
    }

    public struct CloudWatchAlarmTemplateGroupSummary: AWSDecodableShape {
        /// A cloudwatch alarm template group's ARN (Amazon Resource Name)
        public let arn: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdAt: Date?
        /// A resource's optional description.
        public let description: String?
        /// A cloudwatch alarm template group's id. AWS provided template groups have ids that start with `aws-`
        public let id: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var modifiedAt: Date?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        public let tags: [String: String]?
        /// The number of templates in a group.
        public let templateCount: Int?

        @inlinable
        public init(arn: String? = nil, createdAt: Date? = nil, description: String? = nil, id: String? = nil, modifiedAt: Date? = nil, name: String? = nil, tags: [String: String]? = nil, templateCount: Int? = nil) {
            self.arn = arn
            self.createdAt = createdAt
            self.description = description
            self.id = id
            self.modifiedAt = modifiedAt
            self.name = name
            self.tags = tags
            self.templateCount = templateCount
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case createdAt = "createdAt"
            case description = "description"
            case id = "id"
            case modifiedAt = "modifiedAt"
            case name = "name"
            case tags = "tags"
            case templateCount = "templateCount"
        }
    }

    public struct CloudWatchAlarmTemplateSummary: AWSDecodableShape {
        /// A cloudwatch alarm template's ARN (Amazon Resource Name)
        public let arn: String?
        public let comparisonOperator: CloudWatchAlarmTemplateComparisonOperator?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdAt: Date?
        /// The number of datapoints within the evaluation period that must be breaching to trigger the alarm.
        public let datapointsToAlarm: Int?
        /// A resource's optional description.
        public let description: String?
        /// The number of periods over which data is compared to the specified threshold.
        public let evaluationPeriods: Int?
        /// A cloudwatch alarm template group's id. AWS provided template groups have ids that start with `aws-`
        public let groupId: String?
        /// A cloudwatch alarm template's id. AWS provided templates have ids that start with `aws-`
        public let id: String?
        /// The name of the metric associated with the alarm. Must be compatible with targetResourceType.
        public let metricName: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var modifiedAt: Date?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        /// The period, in seconds, over which the specified statistic is applied.
        public let period: Int?
        public let statistic: CloudWatchAlarmTemplateStatistic?
        public let tags: [String: String]?
        public let targetResourceType: CloudWatchAlarmTemplateTargetResourceType?
        /// The threshold value to compare with the specified statistic.
        public let threshold: Double?
        public let treatMissingData: CloudWatchAlarmTemplateTreatMissingData?

        @inlinable
        public init(arn: String? = nil, comparisonOperator: CloudWatchAlarmTemplateComparisonOperator? = nil, createdAt: Date? = nil, datapointsToAlarm: Int? = nil, description: String? = nil, evaluationPeriods: Int? = nil, groupId: String? = nil, id: String? = nil, metricName: String? = nil, modifiedAt: Date? = nil, name: String? = nil, period: Int? = nil, statistic: CloudWatchAlarmTemplateStatistic? = nil, tags: [String: String]? = nil, targetResourceType: CloudWatchAlarmTemplateTargetResourceType? = nil, threshold: Double? = nil, treatMissingData: CloudWatchAlarmTemplateTreatMissingData? = nil) {
            self.arn = arn
            self.comparisonOperator = comparisonOperator
            self.createdAt = createdAt
            self.datapointsToAlarm = datapointsToAlarm
            self.description = description
            self.evaluationPeriods = evaluationPeriods
            self.groupId = groupId
            self.id = id
            self.metricName = metricName
            self.modifiedAt = modifiedAt
            self.name = name
            self.period = period
            self.statistic = statistic
            self.tags = tags
            self.targetResourceType = targetResourceType
            self.threshold = threshold
            self.treatMissingData = treatMissingData
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case comparisonOperator = "comparisonOperator"
            case createdAt = "createdAt"
            case datapointsToAlarm = "datapointsToAlarm"
            case description = "description"
            case evaluationPeriods = "evaluationPeriods"
            case groupId = "groupId"
            case id = "id"
            case metricName = "metricName"
            case modifiedAt = "modifiedAt"
            case name = "name"
            case period = "period"
            case statistic = "statistic"
            case tags = "tags"
            case targetResourceType = "targetResourceType"
            case threshold = "threshold"
            case treatMissingData = "treatMissingData"
        }
    }

    public struct ClusterNetworkSettings: AWSDecodableShape {
        /// The network interface that is the default route for traffic to and from the node. MediaLive Anywhere uses this default when the destination for the traffic isn't covered by the route table for any of the networks. Specify the value of the appropriate logicalInterfaceName parameter that you create in the interfaceMappings.
        public let defaultRoute: String?
        /// An array of interfaceMapping objects for this Cluster. Each mapping logically connects one interface on the nodes with one Network. You need only one mapping for each interface because all the Nodes share the mapping.
        public let interfaceMappings: [InterfaceMapping]?

        @inlinable
        public init(defaultRoute: String? = nil, interfaceMappings: [InterfaceMapping]? = nil) {
            self.defaultRoute = defaultRoute
            self.interfaceMappings = interfaceMappings
        }

        private enum CodingKeys: String, CodingKey {
            case defaultRoute = "defaultRoute"
            case interfaceMappings = "interfaceMappings"
        }
    }

    public struct ClusterNetworkSettingsCreateRequest: AWSEncodableShape {
        /// Specify one network interface as the default route for traffic to and from the Node. MediaLive Anywhere uses this default when the destination for the traffic isn't covered by the route table for any of the networks. Specify the value of the appropriate logicalInterfaceName parameter that you create in the interfaceMappings.
        public let defaultRoute: String?
        /// An array of interfaceMapping objects for this Cluster. You must create a mapping for node interfaces that you plan to use for encoding traffic. You typically don't create a mapping for the management interface. You define this mapping in the Cluster so that the mapping can be used by all the Nodes. Each mapping logically connects one interface on the nodes with one Network. Each mapping consists of a pair of parameters. The logicalInterfaceName parameter creates a logical name for the Node interface that handles a specific type of traffic. For example, my-Inputs-Interface. The networkID parameter refers to the ID of the network. When you create the Nodes in this Cluster, you will associate the logicalInterfaceName with the appropriate physical interface.
        public let interfaceMappings: [InterfaceMappingCreateRequest]?

        @inlinable
        public init(defaultRoute: String? = nil, interfaceMappings: [InterfaceMappingCreateRequest]? = nil) {
            self.defaultRoute = defaultRoute
            self.interfaceMappings = interfaceMappings
        }

        private enum CodingKeys: String, CodingKey {
            case defaultRoute = "defaultRoute"
            case interfaceMappings = "interfaceMappings"
        }
    }

    public struct ClusterNetworkSettingsUpdateRequest: AWSEncodableShape {
        /// Include this parameter only if you want to change the default route for the Cluster. Specify one network interface as the default route for traffic to and from the node. MediaLive Anywhere uses this default when the destination for the traffic isn't covered by the route table for any of the networks. Specify the value of the appropriate logicalInterfaceName parameter that you create in the interfaceMappings.
        public let defaultRoute: String?
        /// An array of interfaceMapping objects for this Cluster. Include this parameter only if you want to change the interface mappings for the Cluster. Typically, you change the interface mappings only to fix an error you made when creating the mapping. In an update request, make sure that you enter the entire set of mappings again, not just the mappings that you want to add or change. You define this mapping so that the mapping can be used by all the Nodes. Each mapping logically connects one interface on the nodes with one Network. Each mapping consists of a pair of parameters. The logicalInterfaceName parameter creates a logical name for the Node interface that handles a specific type of traffic. For example, my-Inputs-Interface. The networkID parameter refers to the ID of the network. When you create the Nodes in this Cluster, you will associate the logicalInterfaceName with the appropriate physical interface.
        public let interfaceMappings: [InterfaceMappingUpdateRequest]?

        @inlinable
        public init(defaultRoute: String? = nil, interfaceMappings: [InterfaceMappingUpdateRequest]? = nil) {
            self.defaultRoute = defaultRoute
            self.interfaceMappings = interfaceMappings
        }

        private enum CodingKeys: String, CodingKey {
            case defaultRoute = "defaultRoute"
            case interfaceMappings = "interfaceMappings"
        }
    }

    public struct CmafIngestCaptionLanguageMapping: AWSEncodableShape & AWSDecodableShape {
        /// A number for the channel for this caption, 1 to 4.
        public let captionChannel: Int?
        /// Language code for the language of the caption in this channel.  For example, ger/deu. See http://www.loc.gov/standards/iso639-2
        public let languageCode: String?

        @inlinable
        public init(captionChannel: Int? = nil, languageCode: String? = nil) {
            self.captionChannel = captionChannel
            self.languageCode = languageCode
        }

        public func validate(name: String) throws {
            try self.validate(self.captionChannel, name: "captionChannel", parent: name, max: 4)
            try self.validate(self.captionChannel, name: "captionChannel", parent: name, min: 1)
            try self.validate(self.languageCode, name: "languageCode", parent: name, max: 3)
            try self.validate(self.languageCode, name: "languageCode", parent: name, min: 3)
        }

        private enum CodingKeys: String, CodingKey {
            case captionChannel = "captionChannel"
            case languageCode = "languageCode"
        }
    }

    public struct CmafIngestGroupSettings: AWSEncodableShape & AWSDecodableShape {
        /// Optional an array of additional destinational HTTP destinations for the OutputGroup outputs
        public let additionalDestinations: [AdditionalDestinations]?
        /// An array that identifies the languages in the four caption channels in the embedded captions.
        public let captionLanguageMappings: [CmafIngestCaptionLanguageMapping]?
        /// A HTTP destination for the tracks
        public let destination: OutputLocationRef?
        /// Set to ENABLED to enable ID3 metadata insertion. To include metadata, you configure other parameters in the output group, or you add an ID3 action to the channel schedule.
        public let id3Behavior: CmafId3Behavior?
        /// Change the modifier that MediaLive automatically adds to the Streams() name that identifies an ID3 track. The default is "id3", which means the default name will be Streams(id3.cmfm). Any string you enter here will replace the "id3" string.\nThe modifier can only contain: numbers, letters, plus (+), minus (-), underscore (_) and period (.) and has a maximum length of 100 characters.
        public let id3NameModifier: String?
        /// If set to passthrough, passes any KLV data from the input source to this output.
        public let klvBehavior: CmafKLVBehavior?
        /// Change the modifier that MediaLive automatically adds to the Streams() name that identifies a KLV track. The default is "klv", which means the default name will be Streams(klv.cmfm). Any string you enter here will replace the "klv" string.\nThe modifier can only contain: numbers, letters, plus (+), minus (-), underscore (_) and period (.) and has a maximum length of 100 characters.
        public let klvNameModifier: String?
        /// If set to passthrough, Nielsen inaudible tones for media tracking will be detected in the input audio and an equivalent ID3 tag will be inserted in the output.
        public let nielsenId3Behavior: CmafNielsenId3Behavior?
        /// Change the modifier that MediaLive automatically adds to the Streams() name that identifies a Nielsen ID3 track. The default is "nid3", which means the default name will be Streams(nid3.cmfm). Any string you enter here will replace the "nid3" string.\nThe modifier can only contain: numbers, letters, plus (+), minus (-), underscore (_) and period (.) and has a maximum length of 100 characters.
        public let nielsenId3NameModifier: String?
        /// Change the modifier that MediaLive automatically adds to the Streams() name for a SCTE 35 track. The default is "scte", which means the default name will be Streams(scte.cmfm). Any string you enter here will replace the "scte" string.\nThe modifier can only contain: numbers, letters, plus (+), minus (-), underscore (_) and period (.) and has a maximum length of 100 characters.
        public let scte35NameModifier: String?
        /// Type of scte35 track to add. none or scte35WithoutSegmentation
        public let scte35Type: Scte35Type?
        /// The nominal duration of segments. The units are specified in SegmentLengthUnits. The segments will end on the next keyframe after the specified duration, so the actual segment length might be longer, and it might be a fraction of the units.
        public let segmentLength: Int?
        /// Time unit for segment length parameter.
        public let segmentLengthUnits: CmafIngestSegmentLengthUnits?
        /// Number of milliseconds to delay the output from the second pipeline.
        public let sendDelayMs: Int?
        /// Set to none if you don't want to insert a timecode in the output. Otherwise choose the frame type for the timecode.
        public let timedMetadataId3Frame: CmafTimedMetadataId3Frame?
        /// If you set up to insert a timecode in the output, specify the frequency for the frame, in seconds.
        public let timedMetadataId3Period: Int?
        /// Set to enabled to pass through ID3 metadata from the input sources.
        public let timedMetadataPassthrough: CmafTimedMetadataPassthrough?

        @inlinable
        public init(additionalDestinations: [AdditionalDestinations]? = nil, captionLanguageMappings: [CmafIngestCaptionLanguageMapping]? = nil, destination: OutputLocationRef? = nil, id3Behavior: CmafId3Behavior? = nil, id3NameModifier: String? = nil, klvBehavior: CmafKLVBehavior? = nil, klvNameModifier: String? = nil, nielsenId3Behavior: CmafNielsenId3Behavior? = nil, nielsenId3NameModifier: String? = nil, scte35NameModifier: String? = nil, scte35Type: Scte35Type? = nil, segmentLength: Int? = nil, segmentLengthUnits: CmafIngestSegmentLengthUnits? = nil, sendDelayMs: Int? = nil, timedMetadataId3Frame: CmafTimedMetadataId3Frame? = nil, timedMetadataId3Period: Int? = nil, timedMetadataPassthrough: CmafTimedMetadataPassthrough? = nil) {
            self.additionalDestinations = additionalDestinations
            self.captionLanguageMappings = captionLanguageMappings
            self.destination = destination
            self.id3Behavior = id3Behavior
            self.id3NameModifier = id3NameModifier
            self.klvBehavior = klvBehavior
            self.klvNameModifier = klvNameModifier
            self.nielsenId3Behavior = nielsenId3Behavior
            self.nielsenId3NameModifier = nielsenId3NameModifier
            self.scte35NameModifier = scte35NameModifier
            self.scte35Type = scte35Type
            self.segmentLength = segmentLength
            self.segmentLengthUnits = segmentLengthUnits
            self.sendDelayMs = sendDelayMs
            self.timedMetadataId3Frame = timedMetadataId3Frame
            self.timedMetadataId3Period = timedMetadataId3Period
            self.timedMetadataPassthrough = timedMetadataPassthrough
        }

        public func validate(name: String) throws {
            try self.captionLanguageMappings?.forEach {
                try $0.validate(name: "\(name).captionLanguageMappings[]")
            }
            try self.validate(self.id3NameModifier, name: "id3NameModifier", parent: name, max: 100)
            try self.validate(self.klvNameModifier, name: "klvNameModifier", parent: name, max: 100)
            try self.validate(self.nielsenId3NameModifier, name: "nielsenId3NameModifier", parent: name, max: 100)
            try self.validate(self.scte35NameModifier, name: "scte35NameModifier", parent: name, max: 100)
            try self.validate(self.segmentLength, name: "segmentLength", parent: name, min: 1)
            try self.validate(self.sendDelayMs, name: "sendDelayMs", parent: name, max: 2000)
            try self.validate(self.sendDelayMs, name: "sendDelayMs", parent: name, min: 0)
            try self.validate(self.timedMetadataId3Period, name: "timedMetadataId3Period", parent: name, max: 10000)
            try self.validate(self.timedMetadataId3Period, name: "timedMetadataId3Period", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case additionalDestinations = "additionalDestinations"
            case captionLanguageMappings = "captionLanguageMappings"
            case destination = "destination"
            case id3Behavior = "id3Behavior"
            case id3NameModifier = "id3NameModifier"
            case klvBehavior = "klvBehavior"
            case klvNameModifier = "klvNameModifier"
            case nielsenId3Behavior = "nielsenId3Behavior"
            case nielsenId3NameModifier = "nielsenId3NameModifier"
            case scte35NameModifier = "scte35NameModifier"
            case scte35Type = "scte35Type"
            case segmentLength = "segmentLength"
            case segmentLengthUnits = "segmentLengthUnits"
            case sendDelayMs = "sendDelayMs"
            case timedMetadataId3Frame = "timedMetadataId3Frame"
            case timedMetadataId3Period = "timedMetadataId3Period"
            case timedMetadataPassthrough = "timedMetadataPassthrough"
        }
    }

    public struct CmafIngestOutputSettings: AWSEncodableShape & AWSDecodableShape {
        /// String concatenated to the end of the destination filename.  Required for multiple outputs of the same type.
        public let nameModifier: String?

        @inlinable
        public init(nameModifier: String? = nil) {
            self.nameModifier = nameModifier
        }

        private enum CodingKeys: String, CodingKey {
            case nameModifier = "nameModifier"
        }
    }

    public struct ColorCorrection: AWSEncodableShape & AWSDecodableShape {
        /// The color space of the input.
        public let inputColorSpace: ColorSpace?
        /// The color space of the output.
        public let outputColorSpace: ColorSpace?
        /// The URI of the 3D LUT file. The protocol must be 's3:' or 's3ssl:':.
        public let uri: String?

        @inlinable
        public init(inputColorSpace: ColorSpace? = nil, outputColorSpace: ColorSpace? = nil, uri: String? = nil) {
            self.inputColorSpace = inputColorSpace
            self.outputColorSpace = outputColorSpace
            self.uri = uri
        }

        private enum CodingKeys: String, CodingKey {
            case inputColorSpace = "inputColorSpace"
            case outputColorSpace = "outputColorSpace"
            case uri = "uri"
        }
    }

    public struct ColorCorrectionSettings: AWSEncodableShape & AWSDecodableShape {
        /// An array of colorCorrections that applies when you are using 3D LUT files to perform color conversion on video. Each colorCorrection contains one 3D LUT file (that defines the color mapping for converting an input color space to an output color space), and the input/output combination that this 3D LUT file applies to. MediaLive reads the color space in the input metadata, determines the color space that you have specified for the output, and finds and uses the LUT file that applies to this combination.
        public let globalColorCorrections: [ColorCorrection]?

        @inlinable
        public init(globalColorCorrections: [ColorCorrection]? = nil) {
            self.globalColorCorrections = globalColorCorrections
        }

        private enum CodingKeys: String, CodingKey {
            case globalColorCorrections = "globalColorCorrections"
        }
    }

    public struct ColorSpacePassthroughSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct CreateChannelPlacementGroupRequest: AWSEncodableShape {
        /// The ID of the cluster.
        public let clusterId: String
        /// Specify a name that is unique in the Cluster. You can't change the name. Names are case-sensitive.
        public let name: String?
        /// An array of one ID for the Node that you want to associate with the ChannelPlacementGroup. (You can't associate more than one Node with the ChannelPlacementGroup.) The Node and the ChannelPlacementGroup must be in the same Cluster.
        public let nodes: [String]?
        /// An ID that you assign to a create request. This ID ensures idempotency when creating resources. the request.
        public let requestId: String?
        /// A collection of key-value pairs.
        public let tags: [String: String]?

        @inlinable
        public init(clusterId: String, name: String? = nil, nodes: [String]? = nil, requestId: String? = CreateChannelPlacementGroupRequest.idempotencyToken(), tags: [String: String]? = nil) {
            self.clusterId = clusterId
            self.name = name
            self.nodes = nodes
            self.requestId = requestId
            self.tags = tags
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.clusterId, key: "ClusterId")
            try container.encodeIfPresent(self.name, forKey: .name)
            try container.encodeIfPresent(self.nodes, forKey: .nodes)
            try container.encodeIfPresent(self.requestId, forKey: .requestId)
            try container.encodeIfPresent(self.tags, forKey: .tags)
        }

        private enum CodingKeys: String, CodingKey {
            case name = "name"
            case nodes = "nodes"
            case requestId = "requestId"
            case tags = "tags"
        }
    }

    public struct CreateChannelPlacementGroupResponse: AWSDecodableShape {
        /// The ARN of this ChannelPlacementGroup. It is automatically assigned when the ChannelPlacementGroup is created.
        public let arn: String?
        /// Used in ListChannelPlacementGroupsResult
        public let channels: [String]?
        /// The ID of the Cluster that the Node belongs to.
        public let clusterId: String?
        /// The ID of the ChannelPlacementGroup. Unique in the AWS account. The ID is the resource-id portion of the ARN.
        public let id: String?
        /// The name that you specified for the ChannelPlacementGroup.
        public let name: String?
        /// An array with one item, which is the single Node that is associated with the ChannelPlacementGroup.
        public let nodes: [String]?
        /// The current state of the ChannelPlacementGroup.
        public let state: ChannelPlacementGroupState?

        @inlinable
        public init(arn: String? = nil, channels: [String]? = nil, clusterId: String? = nil, id: String? = nil, name: String? = nil, nodes: [String]? = nil, state: ChannelPlacementGroupState? = nil) {
            self.arn = arn
            self.channels = channels
            self.clusterId = clusterId
            self.id = id
            self.name = name
            self.nodes = nodes
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case channels = "channels"
            case clusterId = "clusterId"
            case id = "id"
            case name = "name"
            case nodes = "nodes"
            case state = "state"
        }
    }

    public struct CreateChannelRequest: AWSEncodableShape {
        /// The Elemental Anywhere settings for this channel.
        public let anywhereSettings: AnywhereSettings?
        /// Specification of CDI inputs for this channel
        public let cdiInputSpecification: CdiInputSpecification?
        /// The class for this channel. STANDARD for a channel with two pipelines or SINGLE_PIPELINE for a channel with one pipeline.
        public let channelClass: ChannelClass?
        /// The desired engine version for this channel.
        public let channelEngineVersion: ChannelEngineVersionRequest?
        public let destinations: [OutputDestination]?
        public let dryRun: Bool?
        public let encoderSettings: EncoderSettings?
        /// List of input attachments for channel.
        public let inputAttachments: [InputAttachment]?
        /// Specification of network and file inputs for this channel
        public let inputSpecification: InputSpecification?
        /// The log level to write to CloudWatch Logs.
        public let logLevel: LogLevel?
        /// Maintenance settings for this channel.
        public let maintenance: MaintenanceCreateSettings?
        /// Name of channel.
        public let name: String?
        /// Unique request ID to be specified. This is needed to prevent retries from
        /// creating multiple resources.
        public let requestId: String?
        /// Deprecated field that's only usable by whitelisted customers.
        public let reserved: String?
        /// An optional Amazon Resource Name (ARN) of the role to assume when running the Channel.
        public let roleArn: String?
        /// A collection of key-value pairs.
        public let tags: [String: String]?
        /// Settings for the VPC outputs
        public let vpc: VpcOutputSettings?

        @inlinable
        public init(anywhereSettings: AnywhereSettings? = nil, cdiInputSpecification: CdiInputSpecification? = nil, channelClass: ChannelClass? = nil, channelEngineVersion: ChannelEngineVersionRequest? = nil, destinations: [OutputDestination]? = nil, dryRun: Bool? = nil, encoderSettings: EncoderSettings? = nil, inputAttachments: [InputAttachment]? = nil, inputSpecification: InputSpecification? = nil, logLevel: LogLevel? = nil, maintenance: MaintenanceCreateSettings? = nil, name: String? = nil, requestId: String? = CreateChannelRequest.idempotencyToken(), roleArn: String? = nil, tags: [String: String]? = nil, vpc: VpcOutputSettings? = nil) {
            self.anywhereSettings = anywhereSettings
            self.cdiInputSpecification = cdiInputSpecification
            self.channelClass = channelClass
            self.channelEngineVersion = channelEngineVersion
            self.destinations = destinations
            self.dryRun = dryRun
            self.encoderSettings = encoderSettings
            self.inputAttachments = inputAttachments
            self.inputSpecification = inputSpecification
            self.logLevel = logLevel
            self.maintenance = maintenance
            self.name = name
            self.requestId = requestId
            self.reserved = nil
            self.roleArn = roleArn
            self.tags = tags
            self.vpc = vpc
        }

        @available(*, deprecated, message: "Members reserved have been deprecated")
        @inlinable
        public init(anywhereSettings: AnywhereSettings? = nil, cdiInputSpecification: CdiInputSpecification? = nil, channelClass: ChannelClass? = nil, channelEngineVersion: ChannelEngineVersionRequest? = nil, destinations: [OutputDestination]? = nil, dryRun: Bool? = nil, encoderSettings: EncoderSettings? = nil, inputAttachments: [InputAttachment]? = nil, inputSpecification: InputSpecification? = nil, logLevel: LogLevel? = nil, maintenance: MaintenanceCreateSettings? = nil, name: String? = nil, requestId: String? = CreateChannelRequest.idempotencyToken(), reserved: String? = nil, roleArn: String? = nil, tags: [String: String]? = nil, vpc: VpcOutputSettings? = nil) {
            self.anywhereSettings = anywhereSettings
            self.cdiInputSpecification = cdiInputSpecification
            self.channelClass = channelClass
            self.channelEngineVersion = channelEngineVersion
            self.destinations = destinations
            self.dryRun = dryRun
            self.encoderSettings = encoderSettings
            self.inputAttachments = inputAttachments
            self.inputSpecification = inputSpecification
            self.logLevel = logLevel
            self.maintenance = maintenance
            self.name = name
            self.requestId = requestId
            self.reserved = reserved
            self.roleArn = roleArn
            self.tags = tags
            self.vpc = vpc
        }

        public func validate(name: String) throws {
            try self.destinations?.forEach {
                try $0.validate(name: "\(name).destinations[]")
            }
            try self.encoderSettings?.validate(name: "\(name).encoderSettings")
            try self.inputAttachments?.forEach {
                try $0.validate(name: "\(name).inputAttachments[]")
            }
            try self.maintenance?.validate(name: "\(name).maintenance")
        }

        private enum CodingKeys: String, CodingKey {
            case anywhereSettings = "anywhereSettings"
            case cdiInputSpecification = "cdiInputSpecification"
            case channelClass = "channelClass"
            case channelEngineVersion = "channelEngineVersion"
            case destinations = "destinations"
            case dryRun = "dryRun"
            case encoderSettings = "encoderSettings"
            case inputAttachments = "inputAttachments"
            case inputSpecification = "inputSpecification"
            case logLevel = "logLevel"
            case maintenance = "maintenance"
            case name = "name"
            case requestId = "requestId"
            case reserved = "reserved"
            case roleArn = "roleArn"
            case tags = "tags"
            case vpc = "vpc"
        }
    }

    public struct CreateChannelResponse: AWSDecodableShape {
        public let channel: Channel?

        @inlinable
        public init(channel: Channel? = nil) {
            self.channel = channel
        }

        private enum CodingKeys: String, CodingKey {
            case channel = "channel"
        }
    }

    public struct CreateCloudWatchAlarmTemplateGroupRequest: AWSEncodableShape {
        /// A resource's optional description.
        public let description: String?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        /// An ID that you assign to a create request. This ID ensures idempotency when creating resources.
        public let requestId: String?
        public let tags: [String: String]?

        @inlinable
        public init(description: String? = nil, name: String? = nil, requestId: String? = CreateCloudWatchAlarmTemplateGroupRequest.idempotencyToken(), tags: [String: String]? = nil) {
            self.description = description
            self.name = name
            self.requestId = requestId
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.description, name: "description", parent: name, max: 1024)
            try self.validate(self.name, name: "name", parent: name, max: 255)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[^\\s]+$")
            try self.validate(self.requestId, name: "requestId", parent: name, max: 256)
            try self.validate(self.requestId, name: "requestId", parent: name, min: 1)
            try self.validate(self.requestId, name: "requestId", parent: name, pattern: "^[\\S]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case description = "description"
            case name = "name"
            case requestId = "requestId"
            case tags = "tags"
        }
    }

    public struct CreateCloudWatchAlarmTemplateGroupResponse: AWSDecodableShape {
        /// A cloudwatch alarm template group's ARN (Amazon Resource Name)
        public let arn: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdAt: Date?
        /// A resource's optional description.
        public let description: String?
        /// A cloudwatch alarm template group's id. AWS provided template groups have ids that start with `aws-`
        public let id: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var modifiedAt: Date?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        public let tags: [String: String]?

        @inlinable
        public init(arn: String? = nil, createdAt: Date? = nil, description: String? = nil, id: String? = nil, modifiedAt: Date? = nil, name: String? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.createdAt = createdAt
            self.description = description
            self.id = id
            self.modifiedAt = modifiedAt
            self.name = name
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case createdAt = "createdAt"
            case description = "description"
            case id = "id"
            case modifiedAt = "modifiedAt"
            case name = "name"
            case tags = "tags"
        }
    }

    public struct CreateCloudWatchAlarmTemplateRequest: AWSEncodableShape {
        public let comparisonOperator: CloudWatchAlarmTemplateComparisonOperator?
        /// The number of datapoints within the evaluation period that must be breaching to trigger the alarm.
        public let datapointsToAlarm: Int?
        /// A resource's optional description.
        public let description: String?
        /// The number of periods over which data is compared to the specified threshold.
        public let evaluationPeriods: Int?
        /// A cloudwatch alarm template group's identifier. Can be either be its id or current name.
        public let groupIdentifier: String?
        /// The name of the metric associated with the alarm. Must be compatible with targetResourceType.
        public let metricName: String?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        /// The period, in seconds, over which the specified statistic is applied.
        public let period: Int?
        /// An ID that you assign to a create request. This ID ensures idempotency when creating resources.
        public let requestId: String?
        public let statistic: CloudWatchAlarmTemplateStatistic?
        public let tags: [String: String]?
        public let targetResourceType: CloudWatchAlarmTemplateTargetResourceType?
        /// The threshold value to compare with the specified statistic.
        public let threshold: Double?
        public let treatMissingData: CloudWatchAlarmTemplateTreatMissingData?

        @inlinable
        public init(comparisonOperator: CloudWatchAlarmTemplateComparisonOperator? = nil, datapointsToAlarm: Int? = nil, description: String? = nil, evaluationPeriods: Int? = nil, groupIdentifier: String? = nil, metricName: String? = nil, name: String? = nil, period: Int? = nil, requestId: String? = CreateCloudWatchAlarmTemplateRequest.idempotencyToken(), statistic: CloudWatchAlarmTemplateStatistic? = nil, tags: [String: String]? = nil, targetResourceType: CloudWatchAlarmTemplateTargetResourceType? = nil, threshold: Double? = nil, treatMissingData: CloudWatchAlarmTemplateTreatMissingData? = nil) {
            self.comparisonOperator = comparisonOperator
            self.datapointsToAlarm = datapointsToAlarm
            self.description = description
            self.evaluationPeriods = evaluationPeriods
            self.groupIdentifier = groupIdentifier
            self.metricName = metricName
            self.name = name
            self.period = period
            self.requestId = requestId
            self.statistic = statistic
            self.tags = tags
            self.targetResourceType = targetResourceType
            self.threshold = threshold
            self.treatMissingData = treatMissingData
        }

        public func validate(name: String) throws {
            try self.validate(self.datapointsToAlarm, name: "datapointsToAlarm", parent: name, min: 1)
            try self.validate(self.description, name: "description", parent: name, max: 1024)
            try self.validate(self.evaluationPeriods, name: "evaluationPeriods", parent: name, min: 1)
            try self.validate(self.groupIdentifier, name: "groupIdentifier", parent: name, pattern: "^[^\\s]+$")
            try self.validate(self.metricName, name: "metricName", parent: name, max: 64)
            try self.validate(self.name, name: "name", parent: name, max: 255)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[^\\s]+$")
            try self.validate(self.period, name: "period", parent: name, max: 86400)
            try self.validate(self.period, name: "period", parent: name, min: 10)
            try self.validate(self.requestId, name: "requestId", parent: name, max: 256)
            try self.validate(self.requestId, name: "requestId", parent: name, min: 1)
            try self.validate(self.requestId, name: "requestId", parent: name, pattern: "^[\\S]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case comparisonOperator = "comparisonOperator"
            case datapointsToAlarm = "datapointsToAlarm"
            case description = "description"
            case evaluationPeriods = "evaluationPeriods"
            case groupIdentifier = "groupIdentifier"
            case metricName = "metricName"
            case name = "name"
            case period = "period"
            case requestId = "requestId"
            case statistic = "statistic"
            case tags = "tags"
            case targetResourceType = "targetResourceType"
            case threshold = "threshold"
            case treatMissingData = "treatMissingData"
        }
    }

    public struct CreateCloudWatchAlarmTemplateResponse: AWSDecodableShape {
        /// A cloudwatch alarm template's ARN (Amazon Resource Name)
        public let arn: String?
        public let comparisonOperator: CloudWatchAlarmTemplateComparisonOperator?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdAt: Date?
        /// The number of datapoints within the evaluation period that must be breaching to trigger the alarm.
        public let datapointsToAlarm: Int?
        /// A resource's optional description.
        public let description: String?
        /// The number of periods over which data is compared to the specified threshold.
        public let evaluationPeriods: Int?
        /// A cloudwatch alarm template group's id. AWS provided template groups have ids that start with `aws-`
        public let groupId: String?
        /// A cloudwatch alarm template's id. AWS provided templates have ids that start with `aws-`
        public let id: String?
        /// The name of the metric associated with the alarm. Must be compatible with targetResourceType.
        public let metricName: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var modifiedAt: Date?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        /// The period, in seconds, over which the specified statistic is applied.
        public let period: Int?
        public let statistic: CloudWatchAlarmTemplateStatistic?
        public let tags: [String: String]?
        public let targetResourceType: CloudWatchAlarmTemplateTargetResourceType?
        /// The threshold value to compare with the specified statistic.
        public let threshold: Double?
        public let treatMissingData: CloudWatchAlarmTemplateTreatMissingData?

        @inlinable
        public init(arn: String? = nil, comparisonOperator: CloudWatchAlarmTemplateComparisonOperator? = nil, createdAt: Date? = nil, datapointsToAlarm: Int? = nil, description: String? = nil, evaluationPeriods: Int? = nil, groupId: String? = nil, id: String? = nil, metricName: String? = nil, modifiedAt: Date? = nil, name: String? = nil, period: Int? = nil, statistic: CloudWatchAlarmTemplateStatistic? = nil, tags: [String: String]? = nil, targetResourceType: CloudWatchAlarmTemplateTargetResourceType? = nil, threshold: Double? = nil, treatMissingData: CloudWatchAlarmTemplateTreatMissingData? = nil) {
            self.arn = arn
            self.comparisonOperator = comparisonOperator
            self.createdAt = createdAt
            self.datapointsToAlarm = datapointsToAlarm
            self.description = description
            self.evaluationPeriods = evaluationPeriods
            self.groupId = groupId
            self.id = id
            self.metricName = metricName
            self.modifiedAt = modifiedAt
            self.name = name
            self.period = period
            self.statistic = statistic
            self.tags = tags
            self.targetResourceType = targetResourceType
            self.threshold = threshold
            self.treatMissingData = treatMissingData
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case comparisonOperator = "comparisonOperator"
            case createdAt = "createdAt"
            case datapointsToAlarm = "datapointsToAlarm"
            case description = "description"
            case evaluationPeriods = "evaluationPeriods"
            case groupId = "groupId"
            case id = "id"
            case metricName = "metricName"
            case modifiedAt = "modifiedAt"
            case name = "name"
            case period = "period"
            case statistic = "statistic"
            case tags = "tags"
            case targetResourceType = "targetResourceType"
            case threshold = "threshold"
            case treatMissingData = "treatMissingData"
        }
    }

    public struct CreateClusterRequest: AWSEncodableShape {
        /// Specify a type. All the Nodes that you later add to this Cluster must be this type of hardware. One Cluster instance can't contain different hardware types. You won't be able to change this parameter after you create the Cluster.
        public let clusterType: ClusterType?
        /// The ARN of the IAM role for the Node in this Cluster. The role must include all the operations that you expect these Node to perform. If necessary, create a role in IAM, then attach it here.
        public let instanceRoleArn: String?
        /// Specify a name that is unique in the AWS account. We recommend that you assign a name that hints at the types of Nodes in the Cluster. Names are case-sensitive.
        public let name: String?
        /// Network settings that connect the Nodes in the Cluster to one or more of the Networks that the Cluster is associated with.
        public let networkSettings: ClusterNetworkSettingsCreateRequest?
        /// The unique ID of the request.
        public let requestId: String?
        /// A collection of key-value pairs.
        public let tags: [String: String]?

        @inlinable
        public init(clusterType: ClusterType? = nil, instanceRoleArn: String? = nil, name: String? = nil, networkSettings: ClusterNetworkSettingsCreateRequest? = nil, requestId: String? = CreateClusterRequest.idempotencyToken(), tags: [String: String]? = nil) {
            self.clusterType = clusterType
            self.instanceRoleArn = instanceRoleArn
            self.name = name
            self.networkSettings = networkSettings
            self.requestId = requestId
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case clusterType = "clusterType"
            case instanceRoleArn = "instanceRoleArn"
            case name = "name"
            case networkSettings = "networkSettings"
            case requestId = "requestId"
            case tags = "tags"
        }
    }

    public struct CreateClusterResponse: AWSDecodableShape {
        /// The ARN of this Cluster. It is automatically assigned when the Cluster is created.
        public let arn: String?
        public let channelIds: [String]?
        /// The hardware type for the Cluster
        public let clusterType: ClusterType?
        /// The ID of the  Cluster. Unique in the AWS account. The ID is the resource-id portion of the ARN.
        public let id: String?
        /// The ARN of the IAM role for the Node in this Cluster. Any Nodes that are associated with this Cluster assume this role. The role gives permissions to the operations that you expect these Node to perform.
        public let instanceRoleArn: String?
        /// The name that you specified for the Cluster.
        public let name: String?
        /// Network settings that connect the Nodes in the Cluster to one or more of the Networks that the Cluster is associated with.
        public let networkSettings: ClusterNetworkSettings?
        /// The current state of the Cluster.
        public let state: ClusterState?

        @inlinable
        public init(arn: String? = nil, channelIds: [String]? = nil, clusterType: ClusterType? = nil, id: String? = nil, instanceRoleArn: String? = nil, name: String? = nil, networkSettings: ClusterNetworkSettings? = nil, state: ClusterState? = nil) {
            self.arn = arn
            self.channelIds = channelIds
            self.clusterType = clusterType
            self.id = id
            self.instanceRoleArn = instanceRoleArn
            self.name = name
            self.networkSettings = networkSettings
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case channelIds = "channelIds"
            case clusterType = "clusterType"
            case id = "id"
            case instanceRoleArn = "instanceRoleArn"
            case name = "name"
            case networkSettings = "networkSettings"
            case state = "state"
        }
    }

    public struct CreateEventBridgeRuleTemplateGroupRequest: AWSEncodableShape {
        /// A resource's optional description.
        public let description: String?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        /// An ID that you assign to a create request. This ID ensures idempotency when creating resources.
        public let requestId: String?
        public let tags: [String: String]?

        @inlinable
        public init(description: String? = nil, name: String? = nil, requestId: String? = CreateEventBridgeRuleTemplateGroupRequest.idempotencyToken(), tags: [String: String]? = nil) {
            self.description = description
            self.name = name
            self.requestId = requestId
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.description, name: "description", parent: name, max: 1024)
            try self.validate(self.name, name: "name", parent: name, max: 255)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[^\\s]+$")
            try self.validate(self.requestId, name: "requestId", parent: name, max: 256)
            try self.validate(self.requestId, name: "requestId", parent: name, min: 1)
            try self.validate(self.requestId, name: "requestId", parent: name, pattern: "^[\\S]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case description = "description"
            case name = "name"
            case requestId = "requestId"
            case tags = "tags"
        }
    }

    public struct CreateEventBridgeRuleTemplateGroupResponse: AWSDecodableShape {
        /// An eventbridge rule template group's ARN (Amazon Resource Name)
        public let arn: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdAt: Date?
        /// A resource's optional description.
        public let description: String?
        /// An eventbridge rule template group's id. AWS provided template groups have ids that start with `aws-`
        public let id: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var modifiedAt: Date?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        public let tags: [String: String]?

        @inlinable
        public init(arn: String? = nil, createdAt: Date? = nil, description: String? = nil, id: String? = nil, modifiedAt: Date? = nil, name: String? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.createdAt = createdAt
            self.description = description
            self.id = id
            self.modifiedAt = modifiedAt
            self.name = name
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case createdAt = "createdAt"
            case description = "description"
            case id = "id"
            case modifiedAt = "modifiedAt"
            case name = "name"
            case tags = "tags"
        }
    }

    public struct CreateEventBridgeRuleTemplateRequest: AWSEncodableShape {
        /// A resource's optional description.
        public let description: String?
        public let eventTargets: [EventBridgeRuleTemplateTarget]?
        public let eventType: EventBridgeRuleTemplateEventType?
        /// An eventbridge rule template group's identifier. Can be either be its id or current name.
        public let groupIdentifier: String?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        /// An ID that you assign to a create request. This ID ensures idempotency when creating resources.
        public let requestId: String?
        public let tags: [String: String]?

        @inlinable
        public init(description: String? = nil, eventTargets: [EventBridgeRuleTemplateTarget]? = nil, eventType: EventBridgeRuleTemplateEventType? = nil, groupIdentifier: String? = nil, name: String? = nil, requestId: String? = CreateEventBridgeRuleTemplateRequest.idempotencyToken(), tags: [String: String]? = nil) {
            self.description = description
            self.eventTargets = eventTargets
            self.eventType = eventType
            self.groupIdentifier = groupIdentifier
            self.name = name
            self.requestId = requestId
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.description, name: "description", parent: name, max: 1024)
            try self.eventTargets?.forEach {
                try $0.validate(name: "\(name).eventTargets[]")
            }
            try self.validate(self.groupIdentifier, name: "groupIdentifier", parent: name, pattern: "^[^\\s]+$")
            try self.validate(self.name, name: "name", parent: name, max: 255)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[^\\s]+$")
            try self.validate(self.requestId, name: "requestId", parent: name, max: 256)
            try self.validate(self.requestId, name: "requestId", parent: name, min: 1)
            try self.validate(self.requestId, name: "requestId", parent: name, pattern: "^[\\S]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case description = "description"
            case eventTargets = "eventTargets"
            case eventType = "eventType"
            case groupIdentifier = "groupIdentifier"
            case name = "name"
            case requestId = "requestId"
            case tags = "tags"
        }
    }

    public struct CreateEventBridgeRuleTemplateResponse: AWSDecodableShape {
        /// An eventbridge rule template's ARN (Amazon Resource Name)
        public let arn: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdAt: Date?
        /// A resource's optional description.
        public let description: String?
        public let eventTargets: [EventBridgeRuleTemplateTarget]?
        public let eventType: EventBridgeRuleTemplateEventType?
        /// An eventbridge rule template group's id. AWS provided template groups have ids that start with `aws-`
        public let groupId: String?
        /// An eventbridge rule template's id. AWS provided templates have ids that start with `aws-`
        public let id: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var modifiedAt: Date?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        public let tags: [String: String]?

        @inlinable
        public init(arn: String? = nil, createdAt: Date? = nil, description: String? = nil, eventTargets: [EventBridgeRuleTemplateTarget]? = nil, eventType: EventBridgeRuleTemplateEventType? = nil, groupId: String? = nil, id: String? = nil, modifiedAt: Date? = nil, name: String? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.createdAt = createdAt
            self.description = description
            self.eventTargets = eventTargets
            self.eventType = eventType
            self.groupId = groupId
            self.id = id
            self.modifiedAt = modifiedAt
            self.name = name
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case createdAt = "createdAt"
            case description = "description"
            case eventTargets = "eventTargets"
            case eventType = "eventType"
            case groupId = "groupId"
            case id = "id"
            case modifiedAt = "modifiedAt"
            case name = "name"
            case tags = "tags"
        }
    }

    public struct CreateInputRequest: AWSEncodableShape {
        /// Destination settings for PUSH type inputs.
        public let destinations: [InputDestinationRequest]?
        /// Settings for the devices.
        public let inputDevices: [InputDeviceSettings]?
        /// The location of this input. AWS, for an input existing in the AWS Cloud, On-Prem for
        /// an input in a customer network.
        public let inputNetworkLocation: InputNetworkLocation?
        /// A list of security groups referenced by IDs to attach to the input.
        public let inputSecurityGroups: [String]?
        /// A list of the MediaConnect Flows that you want to use in this input. You can specify as few as one
        /// Flow and presently, as many as two. The only requirement is when you have more than one is that each Flow is in a
        /// separate Availability Zone as this ensures your EML input is redundant to AZ issues.
        public let mediaConnectFlows: [MediaConnectFlowRequest]?
        /// Multicast Input settings.
        public let multicastSettings: MulticastSettingsCreateRequest?
        /// Name of the input.
        public let name: String?
        /// Unique identifier of the request to ensure the request is handled
        /// exactly once in case of retries.
        public let requestId: String?
        /// The Amazon Resource Name (ARN) of the role this input assumes during and after creation.
        public let roleArn: String?
        public let sdiSources: [String]?
        /// Include this parameter if the input is a SMPTE 2110 input, to identify the stream sources for this input.
        public let smpte2110ReceiverGroupSettings: Smpte2110ReceiverGroupSettings?
        /// The source URLs for a PULL-type input. Every PULL type input needs
        /// exactly two source URLs for redundancy.
        /// Only specify sources for PULL type Inputs. Leave Destinations empty.
        public let sources: [InputSourceRequest]?
        /// The settings associated with an SRT input.
        public let srtSettings: SrtSettingsRequest?
        /// A collection of key-value pairs.
        public let tags: [String: String]?
        public let type: InputType?
        public let vpc: InputVpcRequest?

        @inlinable
        public init(destinations: [InputDestinationRequest]? = nil, inputDevices: [InputDeviceSettings]? = nil, inputNetworkLocation: InputNetworkLocation? = nil, inputSecurityGroups: [String]? = nil, mediaConnectFlows: [MediaConnectFlowRequest]? = nil, multicastSettings: MulticastSettingsCreateRequest? = nil, name: String? = nil, requestId: String? = CreateInputRequest.idempotencyToken(), roleArn: String? = nil, sdiSources: [String]? = nil, smpte2110ReceiverGroupSettings: Smpte2110ReceiverGroupSettings? = nil, sources: [InputSourceRequest]? = nil, srtSettings: SrtSettingsRequest? = nil, tags: [String: String]? = nil, type: InputType? = nil, vpc: InputVpcRequest? = nil) {
            self.destinations = destinations
            self.inputDevices = inputDevices
            self.inputNetworkLocation = inputNetworkLocation
            self.inputSecurityGroups = inputSecurityGroups
            self.mediaConnectFlows = mediaConnectFlows
            self.multicastSettings = multicastSettings
            self.name = name
            self.requestId = requestId
            self.roleArn = roleArn
            self.sdiSources = sdiSources
            self.smpte2110ReceiverGroupSettings = smpte2110ReceiverGroupSettings
            self.sources = sources
            self.srtSettings = srtSettings
            self.tags = tags
            self.type = type
            self.vpc = vpc
        }

        private enum CodingKeys: String, CodingKey {
            case destinations = "destinations"
            case inputDevices = "inputDevices"
            case inputNetworkLocation = "inputNetworkLocation"
            case inputSecurityGroups = "inputSecurityGroups"
            case mediaConnectFlows = "mediaConnectFlows"
            case multicastSettings = "multicastSettings"
            case name = "name"
            case requestId = "requestId"
            case roleArn = "roleArn"
            case sdiSources = "sdiSources"
            case smpte2110ReceiverGroupSettings = "smpte2110ReceiverGroupSettings"
            case sources = "sources"
            case srtSettings = "srtSettings"
            case tags = "tags"
            case type = "type"
            case vpc = "vpc"
        }
    }

    public struct CreateInputResponse: AWSDecodableShape {
        public let input: Input?

        @inlinable
        public init(input: Input? = nil) {
            self.input = input
        }

        private enum CodingKeys: String, CodingKey {
            case input = "input"
        }
    }

    public struct CreateInputSecurityGroupRequest: AWSEncodableShape {
        /// A collection of key-value pairs.
        public let tags: [String: String]?
        /// List of IPv4 CIDR addresses to whitelist
        public let whitelistRules: [InputWhitelistRuleCidr]?

        @inlinable
        public init(tags: [String: String]? = nil, whitelistRules: [InputWhitelistRuleCidr]? = nil) {
            self.tags = tags
            self.whitelistRules = whitelistRules
        }

        private enum CodingKeys: String, CodingKey {
            case tags = "tags"
            case whitelistRules = "whitelistRules"
        }
    }

    public struct CreateInputSecurityGroupResponse: AWSDecodableShape {
        public let securityGroup: InputSecurityGroup?

        @inlinable
        public init(securityGroup: InputSecurityGroup? = nil) {
            self.securityGroup = securityGroup
        }

        private enum CodingKeys: String, CodingKey {
            case securityGroup = "securityGroup"
        }
    }

    public struct CreateMultiplexProgramRequest: AWSEncodableShape {
        /// ID of the multiplex where the program is to be created.
        public let multiplexId: String
        /// The settings for this multiplex program.
        public let multiplexProgramSettings: MultiplexProgramSettings?
        /// Name of multiplex program.
        public let programName: String?
        /// Unique request ID. This prevents retries from creating multiple
        /// resources.
        public let requestId: String?

        @inlinable
        public init(multiplexId: String, multiplexProgramSettings: MultiplexProgramSettings? = nil, programName: String? = nil, requestId: String? = nil) {
            self.multiplexId = multiplexId
            self.multiplexProgramSettings = multiplexProgramSettings
            self.programName = programName
            self.requestId = requestId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.multiplexId, key: "MultiplexId")
            try container.encodeIfPresent(self.multiplexProgramSettings, forKey: .multiplexProgramSettings)
            try container.encodeIfPresent(self.programName, forKey: .programName)
            try container.encodeIfPresent(self.requestId, forKey: .requestId)
        }

        public func validate(name: String) throws {
            try self.multiplexProgramSettings?.validate(name: "\(name).multiplexProgramSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case multiplexProgramSettings = "multiplexProgramSettings"
            case programName = "programName"
            case requestId = "requestId"
        }
    }

    public struct CreateMultiplexProgramResponse: AWSDecodableShape {
        /// The newly created multiplex program.
        public let multiplexProgram: MultiplexProgram?

        @inlinable
        public init(multiplexProgram: MultiplexProgram? = nil) {
            self.multiplexProgram = multiplexProgram
        }

        private enum CodingKeys: String, CodingKey {
            case multiplexProgram = "multiplexProgram"
        }
    }

    public struct CreateMultiplexRequest: AWSEncodableShape {
        /// A list of availability zones for the multiplex. You must specify exactly two.
        public let availabilityZones: [String]?
        /// Configuration for a multiplex event.
        public let multiplexSettings: MultiplexSettings?
        /// Name of multiplex.
        public let name: String?
        /// Unique request ID. This prevents retries from creating multiple
        /// resources.
        public let requestId: String?
        /// A collection of key-value pairs.
        public let tags: [String: String]?

        @inlinable
        public init(availabilityZones: [String]? = nil, multiplexSettings: MultiplexSettings? = nil, name: String? = nil, requestId: String? = nil, tags: [String: String]? = nil) {
            self.availabilityZones = availabilityZones
            self.multiplexSettings = multiplexSettings
            self.name = name
            self.requestId = requestId
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.multiplexSettings?.validate(name: "\(name).multiplexSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case availabilityZones = "availabilityZones"
            case multiplexSettings = "multiplexSettings"
            case name = "name"
            case requestId = "requestId"
            case tags = "tags"
        }
    }

    public struct CreateMultiplexResponse: AWSDecodableShape {
        /// The newly created multiplex.
        public let multiplex: Multiplex?

        @inlinable
        public init(multiplex: Multiplex? = nil) {
            self.multiplex = multiplex
        }

        private enum CodingKeys: String, CodingKey {
            case multiplex = "multiplex"
        }
    }

    public struct CreateNetworkRequest: AWSEncodableShape {
        /// An array of IpPoolCreateRequests that identify a collection of IP addresses in your network that you want to reserve for use in MediaLive Anywhere. MediaLiveAnywhere uses these IP addresses for Push inputs (in both Bridge and NATnetworks) and for output destinations (only in Bridge networks). EachIpPoolUpdateRequest specifies one CIDR block.
        public let ipPools: [IpPoolCreateRequest]?
        /// Specify a name that is unique in the AWS account. We recommend that you assign a name that hints at the type of traffic on the network. Names are case-sensitive.
        public let name: String?
        /// An ID that you assign to a create request. This ID ensures idempotency when creating resources.
        public let requestId: String?
        /// An array of routes that MediaLive Anywhere needs to know about in order to route encoding traffic.
        public let routes: [RouteCreateRequest]?
        /// A collection of key-value pairs.
        public let tags: [String: String]?

        @inlinable
        public init(ipPools: [IpPoolCreateRequest]? = nil, name: String? = nil, requestId: String? = CreateNetworkRequest.idempotencyToken(), routes: [RouteCreateRequest]? = nil, tags: [String: String]? = nil) {
            self.ipPools = ipPools
            self.name = name
            self.requestId = requestId
            self.routes = routes
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case ipPools = "ipPools"
            case name = "name"
            case requestId = "requestId"
            case routes = "routes"
            case tags = "tags"
        }
    }

    public struct CreateNetworkResponse: AWSDecodableShape {
        /// The ARN of this Network. It is automatically assigned when the Network is created.
        public let arn: String?
        public let associatedClusterIds: [String]?
        /// The ID of the Network. Unique in the AWS account. The ID is the resource-id portion of the ARN.
        public let id: String?
        /// An array of IpPools in your organization's network that identify a collection of IP addresses in this network that are reserved for use in MediaLive Anywhere. MediaLive Anywhere uses these IP addresses for Push inputs (in both Bridge and NAT networks) and for output destinations (only in Bridge networks). Each IpPool specifies one CIDR block.
        public let ipPools: [IpPool]?
        /// The name that you specified for the Network.
        public let name: String?
        /// An array of routes that MediaLive Anywhere needs to know about in order to route encoding traffic.
        public let routes: [Route]?
        /// The current state of the Network. Only MediaLive Anywhere can change the state.
        public let state: NetworkState?

        @inlinable
        public init(arn: String? = nil, associatedClusterIds: [String]? = nil, id: String? = nil, ipPools: [IpPool]? = nil, name: String? = nil, routes: [Route]? = nil, state: NetworkState? = nil) {
            self.arn = arn
            self.associatedClusterIds = associatedClusterIds
            self.id = id
            self.ipPools = ipPools
            self.name = name
            self.routes = routes
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case associatedClusterIds = "associatedClusterIds"
            case id = "id"
            case ipPools = "ipPools"
            case name = "name"
            case routes = "routes"
            case state = "state"
        }
    }

    public struct CreateNodeRegistrationScriptRequest: AWSEncodableShape {
        /// The ID of the cluster
        public let clusterId: String
        /// If you're generating a re-registration script for an already existing node, this is where you provide the id.
        public let id: String?
        /// Specify a pattern for MediaLive Anywhere to use to assign a name to each Node in the Cluster. The pattern can include the variables $hn (hostname of the node hardware) and $ts for the date and time that the Node is created, in UTC (for example, 2024-08-20T23:35:12Z).
        public let name: String?
        /// Documentation update needed
        public let nodeInterfaceMappings: [NodeInterfaceMapping]?
        /// An ID that you assign to a create request. This ID ensures idempotency when creating resources.
        public let requestId: String?
        /// The initial role of the Node in the Cluster. ACTIVE means the Node is available for encoding. BACKUP means the Node is a redundant Node and might get used if an ACTIVE Node fails.
        public let role: NodeRole?

        @inlinable
        public init(clusterId: String, id: String? = nil, name: String? = nil, nodeInterfaceMappings: [NodeInterfaceMapping]? = nil, requestId: String? = CreateNodeRegistrationScriptRequest.idempotencyToken(), role: NodeRole? = nil) {
            self.clusterId = clusterId
            self.id = id
            self.name = name
            self.nodeInterfaceMappings = nodeInterfaceMappings
            self.requestId = requestId
            self.role = role
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.clusterId, key: "ClusterId")
            try container.encodeIfPresent(self.id, forKey: .id)
            try container.encodeIfPresent(self.name, forKey: .name)
            try container.encodeIfPresent(self.nodeInterfaceMappings, forKey: .nodeInterfaceMappings)
            try container.encodeIfPresent(self.requestId, forKey: .requestId)
            try container.encodeIfPresent(self.role, forKey: .role)
        }

        private enum CodingKeys: String, CodingKey {
            case id = "id"
            case name = "name"
            case nodeInterfaceMappings = "nodeInterfaceMappings"
            case requestId = "requestId"
            case role = "role"
        }
    }

    public struct CreateNodeRegistrationScriptResponse: AWSDecodableShape {
        /// A script that can be run on a Bring Your Own Device Elemental Anywhere system to create a node in a cluster.
        public let nodeRegistrationScript: String?

        @inlinable
        public init(nodeRegistrationScript: String? = nil) {
            self.nodeRegistrationScript = nodeRegistrationScript
        }

        private enum CodingKeys: String, CodingKey {
            case nodeRegistrationScript = "nodeRegistrationScript"
        }
    }

    public struct CreateNodeRequest: AWSEncodableShape {
        /// The ID of the cluster.
        public let clusterId: String
        /// The user-specified name of the Node to be created.
        public let name: String?
        /// Documentation update needed
        public let nodeInterfaceMappings: [NodeInterfaceMappingCreateRequest]?
        /// An ID that you assign to a create request. This ID ensures idempotency when creating resources.
        public let requestId: String?
        /// The initial role of the Node in the Cluster. ACTIVE means the Node is available for encoding. BACKUP means the Node is a redundant Node and might get used if an ACTIVE Node fails.
        public let role: NodeRole?
        /// A collection of key-value pairs.
        public let tags: [String: String]?

        @inlinable
        public init(clusterId: String, name: String? = nil, nodeInterfaceMappings: [NodeInterfaceMappingCreateRequest]? = nil, requestId: String? = CreateNodeRequest.idempotencyToken(), role: NodeRole? = nil, tags: [String: String]? = nil) {
            self.clusterId = clusterId
            self.name = name
            self.nodeInterfaceMappings = nodeInterfaceMappings
            self.requestId = requestId
            self.role = role
            self.tags = tags
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.clusterId, key: "ClusterId")
            try container.encodeIfPresent(self.name, forKey: .name)
            try container.encodeIfPresent(self.nodeInterfaceMappings, forKey: .nodeInterfaceMappings)
            try container.encodeIfPresent(self.requestId, forKey: .requestId)
            try container.encodeIfPresent(self.role, forKey: .role)
            try container.encodeIfPresent(self.tags, forKey: .tags)
        }

        private enum CodingKeys: String, CodingKey {
            case name = "name"
            case nodeInterfaceMappings = "nodeInterfaceMappings"
            case requestId = "requestId"
            case role = "role"
            case tags = "tags"
        }
    }

    public struct CreateNodeResponse: AWSDecodableShape {
        /// The ARN of the Node. It is automatically assigned when the Node is created.
        public let arn: String?
        /// An array of IDs. Each ID is one ChannelPlacementGroup that is associated with this Node. Empty if the Node is not yet associated with any groups.
        public let channelPlacementGroups: [String]?
        /// The ID of the Cluster that the Node belongs to.
        public let clusterId: String?
        /// The current connection state of the Node.
        public let connectionState: NodeConnectionState?
        /// The unique ID of the Node. Unique in the Cluster. The ID is the resource-id portion of the ARN.
        public let id: String?
        /// The ARN of the EC2 instance hosting the Node.
        public let instanceArn: String?
        /// The name that you specified for the Node.
        public let name: String?
        /// Documentation update needed
        public let nodeInterfaceMappings: [NodeInterfaceMapping]?
        /// The initial role current role of the Node in the Cluster. ACTIVE means the Node is available for encoding. BACKUP means the Node is a redundant Node and might get used if an ACTIVE Node fails.
        public let role: NodeRole?
        /// An array of SDI source mappings. Each mapping connects one logical SdiSource to the physical SDI card and port that the physical SDI source uses.
        public let sdiSourceMappings: [SdiSourceMapping]?
        /// The current state of the Node.
        public let state: NodeState?

        @inlinable
        public init(arn: String? = nil, channelPlacementGroups: [String]? = nil, clusterId: String? = nil, connectionState: NodeConnectionState? = nil, id: String? = nil, instanceArn: String? = nil, name: String? = nil, nodeInterfaceMappings: [NodeInterfaceMapping]? = nil, role: NodeRole? = nil, sdiSourceMappings: [SdiSourceMapping]? = nil, state: NodeState? = nil) {
            self.arn = arn
            self.channelPlacementGroups = channelPlacementGroups
            self.clusterId = clusterId
            self.connectionState = connectionState
            self.id = id
            self.instanceArn = instanceArn
            self.name = name
            self.nodeInterfaceMappings = nodeInterfaceMappings
            self.role = role
            self.sdiSourceMappings = sdiSourceMappings
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case channelPlacementGroups = "channelPlacementGroups"
            case clusterId = "clusterId"
            case connectionState = "connectionState"
            case id = "id"
            case instanceArn = "instanceArn"
            case name = "name"
            case nodeInterfaceMappings = "nodeInterfaceMappings"
            case role = "role"
            case sdiSourceMappings = "sdiSourceMappings"
            case state = "state"
        }
    }

    public struct CreatePartnerInputRequest: AWSEncodableShape {
        /// Unique ID of the input.
        public let inputId: String
        /// Unique identifier of the request to ensure the request is handled
        /// exactly once in case of retries.
        public let requestId: String?
        /// A collection of key-value pairs.
        public let tags: [String: String]?

        @inlinable
        public init(inputId: String, requestId: String? = CreatePartnerInputRequest.idempotencyToken(), tags: [String: String]? = nil) {
            self.inputId = inputId
            self.requestId = requestId
            self.tags = tags
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.inputId, key: "InputId")
            try container.encodeIfPresent(self.requestId, forKey: .requestId)
            try container.encodeIfPresent(self.tags, forKey: .tags)
        }

        private enum CodingKeys: String, CodingKey {
            case requestId = "requestId"
            case tags = "tags"
        }
    }

    public struct CreatePartnerInputResponse: AWSDecodableShape {
        public let input: Input?

        @inlinable
        public init(input: Input? = nil) {
            self.input = input
        }

        private enum CodingKeys: String, CodingKey {
            case input = "input"
        }
    }

    public struct CreateSdiSourceRequest: AWSEncodableShape {
        /// Applies only if the type is QUAD. Specify the mode for handling the quad-link signal: QUADRANT or INTERLEAVE.
        public let mode: SdiSourceMode?
        /// Specify a name that is unique in the AWS account. We recommend you assign a name that describes the source, for example curling-cameraA. Names are case-sensitive.
        public let name: String?
        /// An ID that you assign to a create request. This ID ensures idempotency when creating resources.
        public let requestId: String?
        /// A collection of key-value pairs.
        public let tags: [String: String]?
        /// Specify the  type of the SDI source: SINGLE: The source  is a single-link source. QUAD: The source  is one part of a quad-link source.
        public let type: SdiSourceType?

        @inlinable
        public init(mode: SdiSourceMode? = nil, name: String? = nil, requestId: String? = CreateSdiSourceRequest.idempotencyToken(), tags: [String: String]? = nil, type: SdiSourceType? = nil) {
            self.mode = mode
            self.name = name
            self.requestId = requestId
            self.tags = tags
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case mode = "mode"
            case name = "name"
            case requestId = "requestId"
            case tags = "tags"
            case type = "type"
        }
    }

    public struct CreateSdiSourceResponse: AWSDecodableShape {
        /// Settings for the SDI source.
        public let sdiSource: SdiSource?

        @inlinable
        public init(sdiSource: SdiSource? = nil) {
            self.sdiSource = sdiSource
        }

        private enum CodingKeys: String, CodingKey {
            case sdiSource = "sdiSource"
        }
    }

    public struct CreateSignalMapRequest: AWSEncodableShape {
        public let cloudWatchAlarmTemplateGroupIdentifiers: [String]?
        /// A resource's optional description.
        public let description: String?
        /// A top-level supported AWS resource ARN to discovery a signal map from.
        public let discoveryEntryPointArn: String?
        public let eventBridgeRuleTemplateGroupIdentifiers: [String]?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        /// An ID that you assign to a create request. This ID ensures idempotency when creating resources.
        public let requestId: String?
        public let tags: [String: String]?

        @inlinable
        public init(cloudWatchAlarmTemplateGroupIdentifiers: [String]? = nil, description: String? = nil, discoveryEntryPointArn: String? = nil, eventBridgeRuleTemplateGroupIdentifiers: [String]? = nil, name: String? = nil, requestId: String? = CreateSignalMapRequest.idempotencyToken(), tags: [String: String]? = nil) {
            self.cloudWatchAlarmTemplateGroupIdentifiers = cloudWatchAlarmTemplateGroupIdentifiers
            self.description = description
            self.discoveryEntryPointArn = discoveryEntryPointArn
            self.eventBridgeRuleTemplateGroupIdentifiers = eventBridgeRuleTemplateGroupIdentifiers
            self.name = name
            self.requestId = requestId
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.cloudWatchAlarmTemplateGroupIdentifiers?.forEach {
                try validate($0, name: "cloudWatchAlarmTemplateGroupIdentifiers[]", parent: name, pattern: "^[^\\s]+$")
            }
            try self.validate(self.description, name: "description", parent: name, max: 1024)
            try self.validate(self.discoveryEntryPointArn, name: "discoveryEntryPointArn", parent: name, max: 2048)
            try self.validate(self.discoveryEntryPointArn, name: "discoveryEntryPointArn", parent: name, min: 1)
            try self.eventBridgeRuleTemplateGroupIdentifiers?.forEach {
                try validate($0, name: "eventBridgeRuleTemplateGroupIdentifiers[]", parent: name, pattern: "^[^\\s]+$")
            }
            try self.validate(self.name, name: "name", parent: name, max: 255)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[^\\s]+$")
            try self.validate(self.requestId, name: "requestId", parent: name, max: 256)
            try self.validate(self.requestId, name: "requestId", parent: name, min: 1)
            try self.validate(self.requestId, name: "requestId", parent: name, pattern: "^[\\S]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case cloudWatchAlarmTemplateGroupIdentifiers = "cloudWatchAlarmTemplateGroupIdentifiers"
            case description = "description"
            case discoveryEntryPointArn = "discoveryEntryPointArn"
            case eventBridgeRuleTemplateGroupIdentifiers = "eventBridgeRuleTemplateGroupIdentifiers"
            case name = "name"
            case requestId = "requestId"
            case tags = "tags"
        }
    }

    public struct CreateSignalMapResponse: AWSDecodableShape {
        /// A signal map's ARN (Amazon Resource Name)
        public let arn: String?
        public let cloudWatchAlarmTemplateGroupIds: [String]?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdAt: Date?
        /// A resource's optional description.
        public let description: String?
        /// A top-level supported AWS resource ARN to discovery a signal map from.
        public let discoveryEntryPointArn: String?
        /// Error message associated with a failed creation or failed update attempt of a signal map.
        public let errorMessage: String?
        public let eventBridgeRuleTemplateGroupIds: [String]?
        public let failedMediaResourceMap: [String: MediaResource]?
        /// A signal map's id.
        public let id: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var lastDiscoveredAt: Date?
        public let lastSuccessfulMonitorDeployment: SuccessfulMonitorDeployment?
        public let mediaResourceMap: [String: MediaResource]?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var modifiedAt: Date?
        /// If true, there are pending monitor changes for this signal map that can be deployed.
        public let monitorChangesPendingDeployment: Bool?
        public let monitorDeployment: MonitorDeployment?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        public let status: SignalMapStatus?
        public let tags: [String: String]?

        @inlinable
        public init(arn: String? = nil, cloudWatchAlarmTemplateGroupIds: [String]? = nil, createdAt: Date? = nil, description: String? = nil, discoveryEntryPointArn: String? = nil, errorMessage: String? = nil, eventBridgeRuleTemplateGroupIds: [String]? = nil, failedMediaResourceMap: [String: MediaResource]? = nil, id: String? = nil, lastDiscoveredAt: Date? = nil, lastSuccessfulMonitorDeployment: SuccessfulMonitorDeployment? = nil, mediaResourceMap: [String: MediaResource]? = nil, modifiedAt: Date? = nil, monitorChangesPendingDeployment: Bool? = nil, monitorDeployment: MonitorDeployment? = nil, name: String? = nil, status: SignalMapStatus? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.cloudWatchAlarmTemplateGroupIds = cloudWatchAlarmTemplateGroupIds
            self.createdAt = createdAt
            self.description = description
            self.discoveryEntryPointArn = discoveryEntryPointArn
            self.errorMessage = errorMessage
            self.eventBridgeRuleTemplateGroupIds = eventBridgeRuleTemplateGroupIds
            self.failedMediaResourceMap = failedMediaResourceMap
            self.id = id
            self.lastDiscoveredAt = lastDiscoveredAt
            self.lastSuccessfulMonitorDeployment = lastSuccessfulMonitorDeployment
            self.mediaResourceMap = mediaResourceMap
            self.modifiedAt = modifiedAt
            self.monitorChangesPendingDeployment = monitorChangesPendingDeployment
            self.monitorDeployment = monitorDeployment
            self.name = name
            self.status = status
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case cloudWatchAlarmTemplateGroupIds = "cloudWatchAlarmTemplateGroupIds"
            case createdAt = "createdAt"
            case description = "description"
            case discoveryEntryPointArn = "discoveryEntryPointArn"
            case errorMessage = "errorMessage"
            case eventBridgeRuleTemplateGroupIds = "eventBridgeRuleTemplateGroupIds"
            case failedMediaResourceMap = "failedMediaResourceMap"
            case id = "id"
            case lastDiscoveredAt = "lastDiscoveredAt"
            case lastSuccessfulMonitorDeployment = "lastSuccessfulMonitorDeployment"
            case mediaResourceMap = "mediaResourceMap"
            case modifiedAt = "modifiedAt"
            case monitorChangesPendingDeployment = "monitorChangesPendingDeployment"
            case monitorDeployment = "monitorDeployment"
            case name = "name"
            case status = "status"
            case tags = "tags"
        }
    }

    public struct CreateTagsRequest: AWSEncodableShape {
        public let resourceArn: String
        public let tags: [String: String]?

        @inlinable
        public init(resourceArn: String, tags: [String: String]? = nil) {
            self.resourceArn = resourceArn
            self.tags = tags
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.resourceArn, key: "ResourceArn")
            try container.encodeIfPresent(self.tags, forKey: .tags)
        }

        private enum CodingKeys: String, CodingKey {
            case tags = "tags"
        }
    }

    public struct DeleteChannelPlacementGroupRequest: AWSEncodableShape {
        /// The ID of the channel placement group.
        public let channelPlacementGroupId: String
        /// The ID of the cluster.
        public let clusterId: String

        @inlinable
        public init(channelPlacementGroupId: String, clusterId: String) {
            self.channelPlacementGroupId = channelPlacementGroupId
            self.clusterId = clusterId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.channelPlacementGroupId, key: "ChannelPlacementGroupId")
            request.encodePath(self.clusterId, key: "ClusterId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteChannelPlacementGroupResponse: AWSDecodableShape {
        /// The ARN of this ChannelPlacementGroup. It is automatically assigned when the ChannelPlacementGroup is created.
        public let arn: String?
        /// Used in ListChannelPlacementGroupsResult
        public let channels: [String]?
        /// The ID of the Cluster that the Node belongs to.
        public let clusterId: String?
        /// The ID of the ChannelPlacementGroup. Unique in the AWS account. The ID is the resource-id portion of the ARN.
        public let id: String?
        /// The name that you specified for the ChannelPlacementGroup.
        public let name: String?
        /// An array with one item, which is the single Node that is associated with the ChannelPlacementGroup.
        public let nodes: [String]?
        /// The current state of the ChannelPlacementGroup.
        public let state: ChannelPlacementGroupState?

        @inlinable
        public init(arn: String? = nil, channels: [String]? = nil, clusterId: String? = nil, id: String? = nil, name: String? = nil, nodes: [String]? = nil, state: ChannelPlacementGroupState? = nil) {
            self.arn = arn
            self.channels = channels
            self.clusterId = clusterId
            self.id = id
            self.name = name
            self.nodes = nodes
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case channels = "channels"
            case clusterId = "clusterId"
            case id = "id"
            case name = "name"
            case nodes = "nodes"
            case state = "state"
        }
    }

    public struct DeleteChannelRequest: AWSEncodableShape {
        /// Unique ID of the channel.
        public let channelId: String

        @inlinable
        public init(channelId: String) {
            self.channelId = channelId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.channelId, key: "ChannelId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteChannelResponse: AWSDecodableShape {
        /// Anywhere settings for this channel.
        public let anywhereSettings: DescribeAnywhereSettings?
        /// The unique arn of the channel.
        public let arn: String?
        /// Specification of CDI inputs for this channel
        public let cdiInputSpecification: CdiInputSpecification?
        /// The class for this channel. STANDARD for a channel with two pipelines or SINGLE_PIPELINE for a channel with one pipeline.
        public let channelClass: ChannelClass?
        /// Requested engine version for this channel.
        public let channelEngineVersion: ChannelEngineVersionResponse?
        /// A list of destinations of the channel. For UDP outputs, there is one
        /// destination per output. For other types (HLS, for example), there is
        /// one destination per packager.
        public let destinations: [OutputDestination]?
        /// The endpoints where outgoing connections initiate from
        public let egressEndpoints: [ChannelEgressEndpoint]?
        public let encoderSettings: EncoderSettings?
        /// The unique id of the channel.
        public let id: String?
        /// List of input attachments for channel.
        public let inputAttachments: [InputAttachment]?
        /// Specification of network and file inputs for this channel
        public let inputSpecification: InputSpecification?
        /// The log level being written to CloudWatch Logs.
        public let logLevel: LogLevel?
        /// Maintenance settings for this channel.
        public let maintenance: MaintenanceStatus?
        /// The name of the channel. (user-mutable)
        public let name: String?
        /// Runtime details for the pipelines of a running channel.
        public let pipelineDetails: [PipelineDetail]?
        /// The number of currently healthy pipelines.
        public let pipelinesRunningCount: Int?
        /// The Amazon Resource Name (ARN) of the role assumed when running the Channel.
        public let roleArn: String?
        public let state: ChannelState?
        /// A collection of key-value pairs.
        public let tags: [String: String]?
        /// Settings for VPC output
        public let vpc: VpcOutputSettingsDescription?

        @inlinable
        public init(anywhereSettings: DescribeAnywhereSettings? = nil, arn: String? = nil, cdiInputSpecification: CdiInputSpecification? = nil, channelClass: ChannelClass? = nil, channelEngineVersion: ChannelEngineVersionResponse? = nil, destinations: [OutputDestination]? = nil, egressEndpoints: [ChannelEgressEndpoint]? = nil, encoderSettings: EncoderSettings? = nil, id: String? = nil, inputAttachments: [InputAttachment]? = nil, inputSpecification: InputSpecification? = nil, logLevel: LogLevel? = nil, maintenance: MaintenanceStatus? = nil, name: String? = nil, pipelineDetails: [PipelineDetail]? = nil, pipelinesRunningCount: Int? = nil, roleArn: String? = nil, state: ChannelState? = nil, tags: [String: String]? = nil, vpc: VpcOutputSettingsDescription? = nil) {
            self.anywhereSettings = anywhereSettings
            self.arn = arn
            self.cdiInputSpecification = cdiInputSpecification
            self.channelClass = channelClass
            self.channelEngineVersion = channelEngineVersion
            self.destinations = destinations
            self.egressEndpoints = egressEndpoints
            self.encoderSettings = encoderSettings
            self.id = id
            self.inputAttachments = inputAttachments
            self.inputSpecification = inputSpecification
            self.logLevel = logLevel
            self.maintenance = maintenance
            self.name = name
            self.pipelineDetails = pipelineDetails
            self.pipelinesRunningCount = pipelinesRunningCount
            self.roleArn = roleArn
            self.state = state
            self.tags = tags
            self.vpc = vpc
        }

        private enum CodingKeys: String, CodingKey {
            case anywhereSettings = "anywhereSettings"
            case arn = "arn"
            case cdiInputSpecification = "cdiInputSpecification"
            case channelClass = "channelClass"
            case channelEngineVersion = "channelEngineVersion"
            case destinations = "destinations"
            case egressEndpoints = "egressEndpoints"
            case encoderSettings = "encoderSettings"
            case id = "id"
            case inputAttachments = "inputAttachments"
            case inputSpecification = "inputSpecification"
            case logLevel = "logLevel"
            case maintenance = "maintenance"
            case name = "name"
            case pipelineDetails = "pipelineDetails"
            case pipelinesRunningCount = "pipelinesRunningCount"
            case roleArn = "roleArn"
            case state = "state"
            case tags = "tags"
            case vpc = "vpc"
        }
    }

    public struct DeleteCloudWatchAlarmTemplateGroupRequest: AWSEncodableShape {
        /// A cloudwatch alarm template group's identifier. Can be either be its id or current name.
        public let identifier: String

        @inlinable
        public init(identifier: String) {
            self.identifier = identifier
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.identifier, key: "Identifier")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteCloudWatchAlarmTemplateRequest: AWSEncodableShape {
        /// A cloudwatch alarm template's identifier. Can be either be its id or current name.
        public let identifier: String

        @inlinable
        public init(identifier: String) {
            self.identifier = identifier
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.identifier, key: "Identifier")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteClusterRequest: AWSEncodableShape {
        /// The ID of the cluster.
        public let clusterId: String

        @inlinable
        public init(clusterId: String) {
            self.clusterId = clusterId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.clusterId, key: "ClusterId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteClusterResponse: AWSDecodableShape {
        /// The ARN of this Cluster. It is automatically assigned when the Cluster is created.
        public let arn: String?
        public let channelIds: [String]?
        /// The hardware type for the Cluster
        public let clusterType: ClusterType?
        /// The ID of the  Cluster. Unique in the AWS account. The ID is the resource-id portion of the ARN.
        public let id: String?
        /// The ARN of the IAM role for the Node in this Cluster. Any Nodes that are associated with this Cluster assume this role. The role gives permissions to the operations that you expect these Node to perform.
        public let instanceRoleArn: String?
        /// The name that you specified for the Cluster.
        public let name: String?
        /// Network settings that connect the Nodes in the Cluster to one or more of the Networks that the Cluster is associated with.
        public let networkSettings: ClusterNetworkSettings?
        /// The current state of the Cluster.
        public let state: ClusterState?

        @inlinable
        public init(arn: String? = nil, channelIds: [String]? = nil, clusterType: ClusterType? = nil, id: String? = nil, instanceRoleArn: String? = nil, name: String? = nil, networkSettings: ClusterNetworkSettings? = nil, state: ClusterState? = nil) {
            self.arn = arn
            self.channelIds = channelIds
            self.clusterType = clusterType
            self.id = id
            self.instanceRoleArn = instanceRoleArn
            self.name = name
            self.networkSettings = networkSettings
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case channelIds = "channelIds"
            case clusterType = "clusterType"
            case id = "id"
            case instanceRoleArn = "instanceRoleArn"
            case name = "name"
            case networkSettings = "networkSettings"
            case state = "state"
        }
    }

    public struct DeleteEventBridgeRuleTemplateGroupRequest: AWSEncodableShape {
        /// An eventbridge rule template group's identifier. Can be either be its id or current name.
        public let identifier: String

        @inlinable
        public init(identifier: String) {
            self.identifier = identifier
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.identifier, key: "Identifier")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteEventBridgeRuleTemplateRequest: AWSEncodableShape {
        /// An eventbridge rule template's identifier. Can be either be its id or current name.
        public let identifier: String

        @inlinable
        public init(identifier: String) {
            self.identifier = identifier
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.identifier, key: "Identifier")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteInputRequest: AWSEncodableShape {
        /// Unique ID of the input
        public let inputId: String

        @inlinable
        public init(inputId: String) {
            self.inputId = inputId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.inputId, key: "InputId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteInputResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteInputSecurityGroupRequest: AWSEncodableShape {
        /// The Input Security Group to delete
        public let inputSecurityGroupId: String

        @inlinable
        public init(inputSecurityGroupId: String) {
            self.inputSecurityGroupId = inputSecurityGroupId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.inputSecurityGroupId, key: "InputSecurityGroupId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteInputSecurityGroupResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteMultiplexProgramRequest: AWSEncodableShape {
        /// The ID of the multiplex that the program belongs to.
        public let multiplexId: String
        /// The multiplex program name.
        public let programName: String

        @inlinable
        public init(multiplexId: String, programName: String) {
            self.multiplexId = multiplexId
            self.programName = programName
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.multiplexId, key: "MultiplexId")
            request.encodePath(self.programName, key: "ProgramName")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteMultiplexProgramResponse: AWSDecodableShape {
        /// The MediaLive channel associated with the program.
        public let channelId: String?
        /// The settings for this multiplex program.
        public let multiplexProgramSettings: MultiplexProgramSettings?
        /// The packet identifier map for this multiplex program.
        public let packetIdentifiersMap: MultiplexProgramPacketIdentifiersMap?
        /// Contains information about the current sources for the specified program in the specified multiplex. Keep in mind that each multiplex pipeline connects to both pipelines in a given source channel (the channel identified by the program). But only one of those channel pipelines is ever active at one time.
        public let pipelineDetails: [MultiplexProgramPipelineDetail]?
        /// The name of the multiplex program.
        public let programName: String?

        @inlinable
        public init(channelId: String? = nil, multiplexProgramSettings: MultiplexProgramSettings? = nil, packetIdentifiersMap: MultiplexProgramPacketIdentifiersMap? = nil, pipelineDetails: [MultiplexProgramPipelineDetail]? = nil, programName: String? = nil) {
            self.channelId = channelId
            self.multiplexProgramSettings = multiplexProgramSettings
            self.packetIdentifiersMap = packetIdentifiersMap
            self.pipelineDetails = pipelineDetails
            self.programName = programName
        }

        private enum CodingKeys: String, CodingKey {
            case channelId = "channelId"
            case multiplexProgramSettings = "multiplexProgramSettings"
            case packetIdentifiersMap = "packetIdentifiersMap"
            case pipelineDetails = "pipelineDetails"
            case programName = "programName"
        }
    }

    public struct DeleteMultiplexRequest: AWSEncodableShape {
        /// The ID of the multiplex.
        public let multiplexId: String

        @inlinable
        public init(multiplexId: String) {
            self.multiplexId = multiplexId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.multiplexId, key: "MultiplexId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteMultiplexResponse: AWSDecodableShape {
        /// The unique arn of the multiplex.
        public let arn: String?
        /// A list of availability zones for the multiplex.
        public let availabilityZones: [String]?
        /// A list of the multiplex output destinations.
        public let destinations: [MultiplexOutputDestination]?
        /// The unique id of the multiplex.
        public let id: String?
        /// Configuration for a multiplex event.
        public let multiplexSettings: MultiplexSettings?
        /// The name of the multiplex.
        public let name: String?
        /// The number of currently healthy pipelines.
        public let pipelinesRunningCount: Int?
        /// The number of programs in the multiplex.
        public let programCount: Int?
        /// The current state of the multiplex.
        public let state: MultiplexState?
        /// A collection of key-value pairs.
        public let tags: [String: String]?

        @inlinable
        public init(arn: String? = nil, availabilityZones: [String]? = nil, destinations: [MultiplexOutputDestination]? = nil, id: String? = nil, multiplexSettings: MultiplexSettings? = nil, name: String? = nil, pipelinesRunningCount: Int? = nil, programCount: Int? = nil, state: MultiplexState? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.availabilityZones = availabilityZones
            self.destinations = destinations
            self.id = id
            self.multiplexSettings = multiplexSettings
            self.name = name
            self.pipelinesRunningCount = pipelinesRunningCount
            self.programCount = programCount
            self.state = state
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case availabilityZones = "availabilityZones"
            case destinations = "destinations"
            case id = "id"
            case multiplexSettings = "multiplexSettings"
            case name = "name"
            case pipelinesRunningCount = "pipelinesRunningCount"
            case programCount = "programCount"
            case state = "state"
            case tags = "tags"
        }
    }

    public struct DeleteNetworkRequest: AWSEncodableShape {
        /// The ID of the network.
        public let networkId: String

        @inlinable
        public init(networkId: String) {
            self.networkId = networkId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.networkId, key: "NetworkId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteNetworkResponse: AWSDecodableShape {
        /// The ARN of this Network. It is automatically assigned when the Network is created.
        public let arn: String?
        public let associatedClusterIds: [String]?
        /// The ID of the Network. Unique in the AWS account. The ID is the resource-id portion of the ARN.
        public let id: String?
        /// An array of IpPools in your organization's network that identify a collection of IP addresses in this network that are reserved for use in MediaLive Anywhere. MediaLive Anywhere uses these IP addresses for Push inputs (in both Bridge and NAT networks) and for output destinations (only in Bridge networks). Each IpPool specifies one CIDR block.
        public let ipPools: [IpPool]?
        /// The name that you specified for the Network.
        public let name: String?
        /// An array of routes that MediaLive Anywhere needs to know about in order to route encoding traffic.
        public let routes: [Route]?
        /// The current state of the Network. Only MediaLive Anywhere can change the state.
        public let state: NetworkState?

        @inlinable
        public init(arn: String? = nil, associatedClusterIds: [String]? = nil, id: String? = nil, ipPools: [IpPool]? = nil, name: String? = nil, routes: [Route]? = nil, state: NetworkState? = nil) {
            self.arn = arn
            self.associatedClusterIds = associatedClusterIds
            self.id = id
            self.ipPools = ipPools
            self.name = name
            self.routes = routes
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case associatedClusterIds = "associatedClusterIds"
            case id = "id"
            case ipPools = "ipPools"
            case name = "name"
            case routes = "routes"
            case state = "state"
        }
    }

    public struct DeleteNodeRequest: AWSEncodableShape {
        /// The ID of the cluster
        public let clusterId: String
        /// The ID of the node.
        public let nodeId: String

        @inlinable
        public init(clusterId: String, nodeId: String) {
            self.clusterId = clusterId
            self.nodeId = nodeId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.clusterId, key: "ClusterId")
            request.encodePath(self.nodeId, key: "NodeId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteNodeResponse: AWSDecodableShape {
        /// The ARN of the Node. It is automatically assigned when the Node is created.
        public let arn: String?
        /// An array of IDs. Each ID is one ChannelPlacementGroup that is associated with this Node. Empty if the Node is not yet associated with any groups.
        public let channelPlacementGroups: [String]?
        /// The ID of the Cluster that the Node belongs to.
        public let clusterId: String?
        /// The current connection state of the Node.
        public let connectionState: NodeConnectionState?
        /// The unique ID of the Node. Unique in the Cluster. The ID is the resource-id portion of the ARN.
        public let id: String?
        /// The ARN of the EC2 instance hosting the Node.
        public let instanceArn: String?
        /// The name that you specified for the Node.
        public let name: String?
        /// Documentation update needed
        public let nodeInterfaceMappings: [NodeInterfaceMapping]?
        /// The initial role current role of the Node in the Cluster. ACTIVE means the Node is available for encoding. BACKUP means the Node is a redundant Node and might get used if an ACTIVE Node fails.
        public let role: NodeRole?
        /// An array of SDI source mappings. Each mapping connects one logical SdiSource to the physical SDI card and port that the physical SDI source uses.
        public let sdiSourceMappings: [SdiSourceMapping]?
        /// The current state of the Node.
        public let state: NodeState?

        @inlinable
        public init(arn: String? = nil, channelPlacementGroups: [String]? = nil, clusterId: String? = nil, connectionState: NodeConnectionState? = nil, id: String? = nil, instanceArn: String? = nil, name: String? = nil, nodeInterfaceMappings: [NodeInterfaceMapping]? = nil, role: NodeRole? = nil, sdiSourceMappings: [SdiSourceMapping]? = nil, state: NodeState? = nil) {
            self.arn = arn
            self.channelPlacementGroups = channelPlacementGroups
            self.clusterId = clusterId
            self.connectionState = connectionState
            self.id = id
            self.instanceArn = instanceArn
            self.name = name
            self.nodeInterfaceMappings = nodeInterfaceMappings
            self.role = role
            self.sdiSourceMappings = sdiSourceMappings
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case channelPlacementGroups = "channelPlacementGroups"
            case clusterId = "clusterId"
            case connectionState = "connectionState"
            case id = "id"
            case instanceArn = "instanceArn"
            case name = "name"
            case nodeInterfaceMappings = "nodeInterfaceMappings"
            case role = "role"
            case sdiSourceMappings = "sdiSourceMappings"
            case state = "state"
        }
    }

    public struct DeleteReservationRequest: AWSEncodableShape {
        /// Unique reservation ID, e.g. '1234567'
        public let reservationId: String

        @inlinable
        public init(reservationId: String) {
            self.reservationId = reservationId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.reservationId, key: "ReservationId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteReservationResponse: AWSDecodableShape {
        /// Unique reservation ARN, e.g. 'arn:aws:medialive:us-west-2:123456789012:reservation:1234567'
        public let arn: String?
        /// Number of reserved resources
        public let count: Int?
        /// Currency code for usagePrice and fixedPrice in ISO-4217 format, e.g. 'USD'
        public let currencyCode: String?
        /// Lease duration, e.g. '12'
        public let duration: Int?
        /// Units for duration, e.g. 'MONTHS'
        public let durationUnits: OfferingDurationUnits?
        /// Reservation UTC end date and time in ISO-8601 format, e.g. '2019-03-01T00:00:00'
        public let end: String?
        /// One-time charge for each reserved resource, e.g. '0.0' for a NO_UPFRONT offering
        public let fixedPrice: Double?
        /// User specified reservation name
        public let name: String?
        /// Offering description, e.g. 'HD AVC output at 10-20 Mbps, 30 fps, and standard VQ in US West (Oregon)'
        public let offeringDescription: String?
        /// Unique offering ID, e.g. '87654321'
        public let offeringId: String?
        /// Offering type, e.g. 'NO_UPFRONT'
        public let offeringType: OfferingType?
        /// AWS region, e.g. 'us-west-2'
        public let region: String?
        /// Renewal settings for the reservation
        public let renewalSettings: RenewalSettings?
        /// Unique reservation ID, e.g. '1234567'
        public let reservationId: String?
        /// Resource configuration details
        public let resourceSpecification: ReservationResourceSpecification?
        /// Reservation UTC start date and time in ISO-8601 format, e.g. '2018-03-01T00:00:00'
        public let start: String?
        /// Current state of reservation, e.g. 'ACTIVE'
        public let state: ReservationState?
        /// A collection of key-value pairs
        public let tags: [String: String]?
        /// Recurring usage charge for each reserved resource, e.g. '157.0'
        public let usagePrice: Double?

        @inlinable
        public init(arn: String? = nil, count: Int? = nil, currencyCode: String? = nil, duration: Int? = nil, durationUnits: OfferingDurationUnits? = nil, end: String? = nil, fixedPrice: Double? = nil, name: String? = nil, offeringDescription: String? = nil, offeringId: String? = nil, offeringType: OfferingType? = nil, region: String? = nil, renewalSettings: RenewalSettings? = nil, reservationId: String? = nil, resourceSpecification: ReservationResourceSpecification? = nil, start: String? = nil, state: ReservationState? = nil, tags: [String: String]? = nil, usagePrice: Double? = nil) {
            self.arn = arn
            self.count = count
            self.currencyCode = currencyCode
            self.duration = duration
            self.durationUnits = durationUnits
            self.end = end
            self.fixedPrice = fixedPrice
            self.name = name
            self.offeringDescription = offeringDescription
            self.offeringId = offeringId
            self.offeringType = offeringType
            self.region = region
            self.renewalSettings = renewalSettings
            self.reservationId = reservationId
            self.resourceSpecification = resourceSpecification
            self.start = start
            self.state = state
            self.tags = tags
            self.usagePrice = usagePrice
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case count = "count"
            case currencyCode = "currencyCode"
            case duration = "duration"
            case durationUnits = "durationUnits"
            case end = "end"
            case fixedPrice = "fixedPrice"
            case name = "name"
            case offeringDescription = "offeringDescription"
            case offeringId = "offeringId"
            case offeringType = "offeringType"
            case region = "region"
            case renewalSettings = "renewalSettings"
            case reservationId = "reservationId"
            case resourceSpecification = "resourceSpecification"
            case start = "start"
            case state = "state"
            case tags = "tags"
            case usagePrice = "usagePrice"
        }
    }

    public struct DeleteScheduleRequest: AWSEncodableShape {
        /// Id of the channel whose schedule is being deleted.
        public let channelId: String

        @inlinable
        public init(channelId: String) {
            self.channelId = channelId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.channelId, key: "ChannelId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteScheduleResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteSdiSourceRequest: AWSEncodableShape {
        /// The ID of the SdiSource.
        public let sdiSourceId: String

        @inlinable
        public init(sdiSourceId: String) {
            self.sdiSourceId = sdiSourceId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.sdiSourceId, key: "SdiSourceId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteSdiSourceResponse: AWSDecodableShape {
        /// Settings for the SDI source.
        public let sdiSource: SdiSource?

        @inlinable
        public init(sdiSource: SdiSource? = nil) {
            self.sdiSource = sdiSource
        }

        private enum CodingKeys: String, CodingKey {
            case sdiSource = "sdiSource"
        }
    }

    public struct DeleteSignalMapRequest: AWSEncodableShape {
        /// A signal map's identifier. Can be either be its id or current name.
        public let identifier: String

        @inlinable
        public init(identifier: String) {
            self.identifier = identifier
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.identifier, key: "Identifier")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteTagsRequest: AWSEncodableShape {
        public let resourceArn: String
        /// An array of tag keys to delete
        public let tagKeys: [String]?

        @inlinable
        public init(resourceArn: String, tagKeys: [String]? = nil) {
            self.resourceArn = resourceArn
            self.tagKeys = tagKeys
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.resourceArn, key: "ResourceArn")
            request.encodeQuery(self.tagKeys, key: "tagKeys")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeAccountConfigurationRequest: AWSEncodableShape {
        public init() {}
    }

    public struct DescribeAccountConfigurationResponse: AWSDecodableShape {
        public let accountConfiguration: AccountConfiguration?

        @inlinable
        public init(accountConfiguration: AccountConfiguration? = nil) {
            self.accountConfiguration = accountConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case accountConfiguration = "accountConfiguration"
        }
    }

    public struct DescribeAnywhereSettings: AWSDecodableShape {
        /// The ID of the channel placement group for the channel.
        public let channelPlacementGroupId: String?
        /// The ID of the cluster for the channel.
        public let clusterId: String?

        @inlinable
        public init(channelPlacementGroupId: String? = nil, clusterId: String? = nil) {
            self.channelPlacementGroupId = channelPlacementGroupId
            self.clusterId = clusterId
        }

        private enum CodingKeys: String, CodingKey {
            case channelPlacementGroupId = "channelPlacementGroupId"
            case clusterId = "clusterId"
        }
    }

    public struct DescribeChannelPlacementGroupRequest: AWSEncodableShape {
        /// The ID of the channel placement group.
        public let channelPlacementGroupId: String
        /// The ID of the cluster.
        public let clusterId: String

        @inlinable
        public init(channelPlacementGroupId: String, clusterId: String) {
            self.channelPlacementGroupId = channelPlacementGroupId
            self.clusterId = clusterId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.channelPlacementGroupId, key: "ChannelPlacementGroupId")
            request.encodePath(self.clusterId, key: "ClusterId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeChannelPlacementGroupResponse: AWSDecodableShape {
        /// The ARN of this ChannelPlacementGroup. It is automatically assigned when the ChannelPlacementGroup is created.
        public let arn: String?
        /// Used in ListChannelPlacementGroupsResult
        public let channels: [String]?
        /// The ID of the Cluster that the Node belongs to.
        public let clusterId: String?
        /// The ID of the ChannelPlacementGroup. Unique in the AWS account. The ID is the resource-id portion of the ARN.
        public let id: String?
        /// The name that you specified for the ChannelPlacementGroup.
        public let name: String?
        /// An array with one item, which is the single Node that is associated with the ChannelPlacementGroup.
        public let nodes: [String]?
        /// The current state of the ChannelPlacementGroup.
        public let state: ChannelPlacementGroupState?

        @inlinable
        public init(arn: String? = nil, channels: [String]? = nil, clusterId: String? = nil, id: String? = nil, name: String? = nil, nodes: [String]? = nil, state: ChannelPlacementGroupState? = nil) {
            self.arn = arn
            self.channels = channels
            self.clusterId = clusterId
            self.id = id
            self.name = name
            self.nodes = nodes
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case channels = "channels"
            case clusterId = "clusterId"
            case id = "id"
            case name = "name"
            case nodes = "nodes"
            case state = "state"
        }
    }

    public struct DescribeChannelPlacementGroupSummary: AWSDecodableShape {
        /// The ARN of this ChannelPlacementGroup. It is automatically assigned when the ChannelPlacementGroup is created.
        public let arn: String?
        /// Used in ListChannelPlacementGroupsResult
        public let channels: [String]?
        /// The ID of the Cluster that the Node belongs to.
        public let clusterId: String?
        /// The ID of the ChannelPlacementGroup. Unique in the AWS account. The ID is the resource-id portion of the ARN.
        public let id: String?
        /// The name that you specified for the ChannelPlacementGroup.
        public let name: String?
        /// An array with one item, which is the single Node that is associated with the ChannelPlacementGroup.
        public let nodes: [String]?
        /// The current state of the ChannelPlacementGroup.
        public let state: ChannelPlacementGroupState?

        @inlinable
        public init(arn: String? = nil, channels: [String]? = nil, clusterId: String? = nil, id: String? = nil, name: String? = nil, nodes: [String]? = nil, state: ChannelPlacementGroupState? = nil) {
            self.arn = arn
            self.channels = channels
            self.clusterId = clusterId
            self.id = id
            self.name = name
            self.nodes = nodes
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case channels = "channels"
            case clusterId = "clusterId"
            case id = "id"
            case name = "name"
            case nodes = "nodes"
            case state = "state"
        }
    }

    public struct DescribeChannelRequest: AWSEncodableShape {
        /// channel ID
        public let channelId: String

        @inlinable
        public init(channelId: String) {
            self.channelId = channelId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.channelId, key: "ChannelId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeChannelResponse: AWSDecodableShape {
        /// Anywhere settings for this channel.
        public let anywhereSettings: DescribeAnywhereSettings?
        /// The unique arn of the channel.
        public let arn: String?
        /// Specification of CDI inputs for this channel
        public let cdiInputSpecification: CdiInputSpecification?
        /// The class for this channel. STANDARD for a channel with two pipelines or SINGLE_PIPELINE for a channel with one pipeline.
        public let channelClass: ChannelClass?
        /// Requested engine version for this channel.
        public let channelEngineVersion: ChannelEngineVersionResponse?
        /// A list of destinations of the channel. For UDP outputs, there is one
        /// destination per output. For other types (HLS, for example), there is
        /// one destination per packager.
        public let destinations: [OutputDestination]?
        /// The endpoints where outgoing connections initiate from
        public let egressEndpoints: [ChannelEgressEndpoint]?
        public let encoderSettings: EncoderSettings?
        /// The unique id of the channel.
        public let id: String?
        /// List of input attachments for channel.
        public let inputAttachments: [InputAttachment]?
        /// Specification of network and file inputs for this channel
        public let inputSpecification: InputSpecification?
        /// The log level being written to CloudWatch Logs.
        public let logLevel: LogLevel?
        /// Maintenance settings for this channel.
        public let maintenance: MaintenanceStatus?
        /// The name of the channel. (user-mutable)
        public let name: String?
        /// Runtime details for the pipelines of a running channel.
        public let pipelineDetails: [PipelineDetail]?
        /// The number of currently healthy pipelines.
        public let pipelinesRunningCount: Int?
        /// The Amazon Resource Name (ARN) of the role assumed when running the Channel.
        public let roleArn: String?
        public let state: ChannelState?
        /// A collection of key-value pairs.
        public let tags: [String: String]?
        /// Settings for VPC output
        public let vpc: VpcOutputSettingsDescription?

        @inlinable
        public init(anywhereSettings: DescribeAnywhereSettings? = nil, arn: String? = nil, cdiInputSpecification: CdiInputSpecification? = nil, channelClass: ChannelClass? = nil, channelEngineVersion: ChannelEngineVersionResponse? = nil, destinations: [OutputDestination]? = nil, egressEndpoints: [ChannelEgressEndpoint]? = nil, encoderSettings: EncoderSettings? = nil, id: String? = nil, inputAttachments: [InputAttachment]? = nil, inputSpecification: InputSpecification? = nil, logLevel: LogLevel? = nil, maintenance: MaintenanceStatus? = nil, name: String? = nil, pipelineDetails: [PipelineDetail]? = nil, pipelinesRunningCount: Int? = nil, roleArn: String? = nil, state: ChannelState? = nil, tags: [String: String]? = nil, vpc: VpcOutputSettingsDescription? = nil) {
            self.anywhereSettings = anywhereSettings
            self.arn = arn
            self.cdiInputSpecification = cdiInputSpecification
            self.channelClass = channelClass
            self.channelEngineVersion = channelEngineVersion
            self.destinations = destinations
            self.egressEndpoints = egressEndpoints
            self.encoderSettings = encoderSettings
            self.id = id
            self.inputAttachments = inputAttachments
            self.inputSpecification = inputSpecification
            self.logLevel = logLevel
            self.maintenance = maintenance
            self.name = name
            self.pipelineDetails = pipelineDetails
            self.pipelinesRunningCount = pipelinesRunningCount
            self.roleArn = roleArn
            self.state = state
            self.tags = tags
            self.vpc = vpc
        }

        private enum CodingKeys: String, CodingKey {
            case anywhereSettings = "anywhereSettings"
            case arn = "arn"
            case cdiInputSpecification = "cdiInputSpecification"
            case channelClass = "channelClass"
            case channelEngineVersion = "channelEngineVersion"
            case destinations = "destinations"
            case egressEndpoints = "egressEndpoints"
            case encoderSettings = "encoderSettings"
            case id = "id"
            case inputAttachments = "inputAttachments"
            case inputSpecification = "inputSpecification"
            case logLevel = "logLevel"
            case maintenance = "maintenance"
            case name = "name"
            case pipelineDetails = "pipelineDetails"
            case pipelinesRunningCount = "pipelinesRunningCount"
            case roleArn = "roleArn"
            case state = "state"
            case tags = "tags"
            case vpc = "vpc"
        }
    }

    public struct DescribeClusterRequest: AWSEncodableShape {
        /// The ID of the cluster.
        public let clusterId: String

        @inlinable
        public init(clusterId: String) {
            self.clusterId = clusterId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.clusterId, key: "ClusterId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeClusterResponse: AWSDecodableShape {
        /// The ARN of this Cluster. It is automatically assigned when the Cluster is created.
        public let arn: String?
        public let channelIds: [String]?
        /// The hardware type for the Cluster
        public let clusterType: ClusterType?
        /// The ID of the  Cluster. Unique in the AWS account. The ID is the resource-id portion of the ARN.
        public let id: String?
        /// The ARN of the IAM role for the Node in this Cluster. Any Nodes that are associated with this Cluster assume this role. The role gives permissions to the operations that you expect these Node to perform.
        public let instanceRoleArn: String?
        /// The name that you specified for the Cluster.
        public let name: String?
        /// Network settings that connect the Nodes in the Cluster to one or more of the Networks that the Cluster is associated with.
        public let networkSettings: ClusterNetworkSettings?
        /// The current state of the Cluster.
        public let state: ClusterState?

        @inlinable
        public init(arn: String? = nil, channelIds: [String]? = nil, clusterType: ClusterType? = nil, id: String? = nil, instanceRoleArn: String? = nil, name: String? = nil, networkSettings: ClusterNetworkSettings? = nil, state: ClusterState? = nil) {
            self.arn = arn
            self.channelIds = channelIds
            self.clusterType = clusterType
            self.id = id
            self.instanceRoleArn = instanceRoleArn
            self.name = name
            self.networkSettings = networkSettings
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case channelIds = "channelIds"
            case clusterType = "clusterType"
            case id = "id"
            case instanceRoleArn = "instanceRoleArn"
            case name = "name"
            case networkSettings = "networkSettings"
            case state = "state"
        }
    }

    public struct DescribeClusterSummary: AWSDecodableShape {
        /// The ARN of this Cluster. It is automatically assigned when the Cluster is created.
        public let arn: String?
        /// An array of the IDs of the Channels that are associated with this Cluster. One Channel is associated with the Cluster as follows: A Channel belongs to a ChannelPlacementGroup. A ChannelPlacementGroup is attached to a Node. A Node belongs to a Cluster.
        public let channelIds: [String]?
        /// The hardware type for the Cluster.
        public let clusterType: ClusterType?
        /// The ID of the Cluster. Unique in the AWS account. The ID is the resource-id portion of the ARN.
        public let id: String?
        /// The ARN of the IAM role for the Node in this Cluster. Any Nodes that are associated with this Cluster assume this role. The role gives permissions to the operations that you expect these Node to perform.
        public let instanceRoleArn: String?
        /// The name that you specified for the Cluster.
        public let name: String?
        /// Network settings that connect the Nodes in the Cluster to one or more of the Networks that the Cluster is associated with.
        public let networkSettings: ClusterNetworkSettings?
        /// The current state of the Cluster.
        public let state: ClusterState?

        @inlinable
        public init(arn: String? = nil, channelIds: [String]? = nil, clusterType: ClusterType? = nil, id: String? = nil, instanceRoleArn: String? = nil, name: String? = nil, networkSettings: ClusterNetworkSettings? = nil, state: ClusterState? = nil) {
            self.arn = arn
            self.channelIds = channelIds
            self.clusterType = clusterType
            self.id = id
            self.instanceRoleArn = instanceRoleArn
            self.name = name
            self.networkSettings = networkSettings
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case channelIds = "channelIds"
            case clusterType = "clusterType"
            case id = "id"
            case instanceRoleArn = "instanceRoleArn"
            case name = "name"
            case networkSettings = "networkSettings"
            case state = "state"
        }
    }

    public struct DescribeInputDeviceRequest: AWSEncodableShape {
        /// The unique ID of this input device. For example, hd-123456789abcdef.
        public let inputDeviceId: String

        @inlinable
        public init(inputDeviceId: String) {
            self.inputDeviceId = inputDeviceId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.inputDeviceId, key: "InputDeviceId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeInputDeviceResponse: AWSDecodableShape {
        /// The unique ARN of the input device.
        public let arn: String?
        /// The Availability Zone associated with this input device.
        public let availabilityZone: String?
        /// The state of the connection between the input device and AWS.
        public let connectionState: InputDeviceConnectionState?
        /// The status of the action to synchronize the device configuration. If you change the configuration of the input device (for example, the maximum bitrate), MediaLive sends the new data to the device. The device might not update itself immediately. SYNCED means the device has updated its configuration. SYNCING means that it has not updated its configuration.
        public let deviceSettingsSyncState: DeviceSettingsSyncState?
        /// The status of software on the input device.
        public let deviceUpdateStatus: DeviceUpdateStatus?
        /// Settings that describe an input device that is type HD.
        public let hdDeviceSettings: InputDeviceHdSettings?
        /// The unique ID of the input device.
        public let id: String?
        /// The network MAC address of the input device.
        public let macAddress: String?
        /// An array of the ARNs for the MediaLive inputs attached to the device. Returned only if the outputType is MEDIALIVE_INPUT.
        public let medialiveInputArns: [String]?
        /// A name that you specify for the input device.
        public let name: String?
        /// The network settings for the input device.
        public let networkSettings: InputDeviceNetworkSettings?
        /// The output attachment type of the input device. Specifies MEDIACONNECT_FLOW if this device is the source for a MediaConnect flow. Specifies MEDIALIVE_INPUT if this device is the source for a MediaLive input.
        public let outputType: InputDeviceOutputType?
        /// The unique serial number of the input device.
        public let serialNumber: String?
        /// A collection of key-value pairs.
        public let tags: [String: String]?
        /// The type of the input device.
        public let type: InputDeviceType?
        /// Settings that describe an input device that is type UHD.
        public let uhdDeviceSettings: InputDeviceUhdSettings?

        @inlinable
        public init(arn: String? = nil, availabilityZone: String? = nil, connectionState: InputDeviceConnectionState? = nil, deviceSettingsSyncState: DeviceSettingsSyncState? = nil, deviceUpdateStatus: DeviceUpdateStatus? = nil, hdDeviceSettings: InputDeviceHdSettings? = nil, id: String? = nil, macAddress: String? = nil, medialiveInputArns: [String]? = nil, name: String? = nil, networkSettings: InputDeviceNetworkSettings? = nil, outputType: InputDeviceOutputType? = nil, serialNumber: String? = nil, tags: [String: String]? = nil, type: InputDeviceType? = nil, uhdDeviceSettings: InputDeviceUhdSettings? = nil) {
            self.arn = arn
            self.availabilityZone = availabilityZone
            self.connectionState = connectionState
            self.deviceSettingsSyncState = deviceSettingsSyncState
            self.deviceUpdateStatus = deviceUpdateStatus
            self.hdDeviceSettings = hdDeviceSettings
            self.id = id
            self.macAddress = macAddress
            self.medialiveInputArns = medialiveInputArns
            self.name = name
            self.networkSettings = networkSettings
            self.outputType = outputType
            self.serialNumber = serialNumber
            self.tags = tags
            self.type = type
            self.uhdDeviceSettings = uhdDeviceSettings
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case availabilityZone = "availabilityZone"
            case connectionState = "connectionState"
            case deviceSettingsSyncState = "deviceSettingsSyncState"
            case deviceUpdateStatus = "deviceUpdateStatus"
            case hdDeviceSettings = "hdDeviceSettings"
            case id = "id"
            case macAddress = "macAddress"
            case medialiveInputArns = "medialiveInputArns"
            case name = "name"
            case networkSettings = "networkSettings"
            case outputType = "outputType"
            case serialNumber = "serialNumber"
            case tags = "tags"
            case type = "type"
            case uhdDeviceSettings = "uhdDeviceSettings"
        }
    }

    public struct DescribeInputDeviceThumbnailRequest: AWSEncodableShape {
        /// The HTTP Accept header. Indicates the requested type for the thumbnail.
        public let accept: AcceptHeader?
        /// The unique ID of this input device. For example, hd-123456789abcdef.
        public let inputDeviceId: String

        @inlinable
        public init(accept: AcceptHeader? = nil, inputDeviceId: String) {
            self.accept = accept
            self.inputDeviceId = inputDeviceId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodeHeader(self.accept, key: "accept")
            request.encodePath(self.inputDeviceId, key: "InputDeviceId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeInputDeviceThumbnailResponse: AWSDecodableShape {
        public static let _options: AWSShapeOptions = [.rawPayload]
        /// The binary data for the thumbnail that the Link device has most recently sent to MediaLive.
        public let body: AWSHTTPBody
        /// The length of the content.
        public let contentLength: Int64?
        /// Specifies the media type of the thumbnail.
        public let contentType: ContentType?
        /// The unique, cacheable version of this thumbnail.
        public let eTag: String?
        /// The date and time the thumbnail was last updated at the device.
        @OptionalCustomCoding<HTTPHeaderDateCoder>
        public var lastModified: Date?

        @inlinable
        public init(body: AWSHTTPBody, contentLength: Int64? = nil, contentType: ContentType? = nil, eTag: String? = nil, lastModified: Date? = nil) {
            self.body = body
            self.contentLength = contentLength
            self.contentType = contentType
            self.eTag = eTag
            self.lastModified = lastModified
        }

        public init(from decoder: Decoder) throws {
            let response = decoder.userInfo[.awsResponse]! as! ResponseDecodingContainer
            let container = try decoder.singleValueContainer()
            self.body = try container.decode(AWSHTTPBody.self)
            self.contentLength = try response.decodeHeaderIfPresent(Int64.self, key: "Content-Length")
            self.contentType = try response.decodeHeaderIfPresent(ContentType.self, key: "Content-Type")
            self.eTag = try response.decodeHeaderIfPresent(String.self, key: "ETag")
            self.lastModified = try response.decodeHeaderIfPresent(Date.self, key: "Last-Modified")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeInputRequest: AWSEncodableShape {
        /// Unique ID of the input
        public let inputId: String

        @inlinable
        public init(inputId: String) {
            self.inputId = inputId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.inputId, key: "InputId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeInputResponse: AWSDecodableShape {
        /// The Unique ARN of the input (generated, immutable).
        public let arn: String?
        /// A list of channel IDs that that input is attached to (currently an input can only be attached to one channel).
        public let attachedChannels: [String]?
        /// A list of the destinations of the input (PUSH-type).
        public let destinations: [InputDestination]?
        /// The generated ID of the input (unique for user account, immutable).
        public let id: String?
        /// STANDARD - MediaLive expects two sources to be connected to this input. If the channel is also STANDARD, both sources will be ingested. If the channel is SINGLE_PIPELINE, only the first source will be ingested; the second source will always be ignored, even if the first source fails.
        /// SINGLE_PIPELINE - You can connect only one source to this input. If the ChannelClass is also SINGLE_PIPELINE, this value is valid. If the ChannelClass is STANDARD, this value is not valid because the channel requires two sources in the input.
        public let inputClass: InputClass?
        /// Settings for the input devices.
        public let inputDevices: [InputDeviceSettings]?
        /// The location of this input. AWS, for an input existing in the AWS Cloud, On-Prem for
        /// an input in a customer network.
        public let inputNetworkLocation: InputNetworkLocation?
        /// A list of IDs for all Inputs which are partners of this one.
        public let inputPartnerIds: [String]?
        /// Certain pull input sources can be dynamic, meaning that they can have their URL's dynamically changes
        /// during input switch actions. Presently, this functionality only works with MP4_FILE and TS_FILE inputs.
        public let inputSourceType: InputSourceType?
        /// A list of MediaConnect Flows for this input.
        public let mediaConnectFlows: [MediaConnectFlow]?
        /// Multicast Input settings.
        public let multicastSettings: MulticastSettings?
        /// The user-assigned name (This is a mutable value).
        public let name: String?
        /// The Amazon Resource Name (ARN) of the role this input assumes during and after creation.
        public let roleArn: String?
        public let sdiSources: [String]?
        /// A list of IDs for all the Input Security Groups attached to the input.
        public let securityGroups: [String]?
        /// Include this parameter if the input is a SMPTE 2110 input, to identify the stream sources for this input.
        public let smpte2110ReceiverGroupSettings: Smpte2110ReceiverGroupSettings?
        /// A list of the sources of the input (PULL-type).
        public let sources: [InputSource]?
        /// The settings associated with an SRT input.
        public let srtSettings: SrtSettings?
        public let state: InputState?
        /// A collection of key-value pairs.
        public let tags: [String: String]?
        public let type: InputType?

        @inlinable
        public init(arn: String? = nil, attachedChannels: [String]? = nil, destinations: [InputDestination]? = nil, id: String? = nil, inputClass: InputClass? = nil, inputDevices: [InputDeviceSettings]? = nil, inputNetworkLocation: InputNetworkLocation? = nil, inputPartnerIds: [String]? = nil, inputSourceType: InputSourceType? = nil, mediaConnectFlows: [MediaConnectFlow]? = nil, multicastSettings: MulticastSettings? = nil, name: String? = nil, roleArn: String? = nil, sdiSources: [String]? = nil, securityGroups: [String]? = nil, smpte2110ReceiverGroupSettings: Smpte2110ReceiverGroupSettings? = nil, sources: [InputSource]? = nil, srtSettings: SrtSettings? = nil, state: InputState? = nil, tags: [String: String]? = nil, type: InputType? = nil) {
            self.arn = arn
            self.attachedChannels = attachedChannels
            self.destinations = destinations
            self.id = id
            self.inputClass = inputClass
            self.inputDevices = inputDevices
            self.inputNetworkLocation = inputNetworkLocation
            self.inputPartnerIds = inputPartnerIds
            self.inputSourceType = inputSourceType
            self.mediaConnectFlows = mediaConnectFlows
            self.multicastSettings = multicastSettings
            self.name = name
            self.roleArn = roleArn
            self.sdiSources = sdiSources
            self.securityGroups = securityGroups
            self.smpte2110ReceiverGroupSettings = smpte2110ReceiverGroupSettings
            self.sources = sources
            self.srtSettings = srtSettings
            self.state = state
            self.tags = tags
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case attachedChannels = "attachedChannels"
            case destinations = "destinations"
            case id = "id"
            case inputClass = "inputClass"
            case inputDevices = "inputDevices"
            case inputNetworkLocation = "inputNetworkLocation"
            case inputPartnerIds = "inputPartnerIds"
            case inputSourceType = "inputSourceType"
            case mediaConnectFlows = "mediaConnectFlows"
            case multicastSettings = "multicastSettings"
            case name = "name"
            case roleArn = "roleArn"
            case sdiSources = "sdiSources"
            case securityGroups = "securityGroups"
            case smpte2110ReceiverGroupSettings = "smpte2110ReceiverGroupSettings"
            case sources = "sources"
            case srtSettings = "srtSettings"
            case state = "state"
            case tags = "tags"
            case type = "type"
        }
    }

    public struct DescribeInputSecurityGroupRequest: AWSEncodableShape {
        /// The id of the Input Security Group to describe
        public let inputSecurityGroupId: String

        @inlinable
        public init(inputSecurityGroupId: String) {
            self.inputSecurityGroupId = inputSecurityGroupId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.inputSecurityGroupId, key: "InputSecurityGroupId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeInputSecurityGroupResponse: AWSDecodableShape {
        /// Unique ARN of Input Security Group
        public let arn: String?
        /// The Id of the Input Security Group
        public let id: String?
        /// The list of inputs currently using this Input Security Group.
        public let inputs: [String]?
        /// The current state of the Input Security Group.
        public let state: InputSecurityGroupState?
        /// A collection of key-value pairs.
        public let tags: [String: String]?
        /// Whitelist rules and their sync status
        public let whitelistRules: [InputWhitelistRule]?

        @inlinable
        public init(arn: String? = nil, id: String? = nil, inputs: [String]? = nil, state: InputSecurityGroupState? = nil, tags: [String: String]? = nil, whitelistRules: [InputWhitelistRule]? = nil) {
            self.arn = arn
            self.id = id
            self.inputs = inputs
            self.state = state
            self.tags = tags
            self.whitelistRules = whitelistRules
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case id = "id"
            case inputs = "inputs"
            case state = "state"
            case tags = "tags"
            case whitelistRules = "whitelistRules"
        }
    }

    public struct DescribeMultiplexProgramRequest: AWSEncodableShape {
        /// The ID of the multiplex that the program belongs to.
        public let multiplexId: String
        /// The name of the program.
        public let programName: String

        @inlinable
        public init(multiplexId: String, programName: String) {
            self.multiplexId = multiplexId
            self.programName = programName
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.multiplexId, key: "MultiplexId")
            request.encodePath(self.programName, key: "ProgramName")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeMultiplexProgramResponse: AWSDecodableShape {
        /// The MediaLive channel associated with the program.
        public let channelId: String?
        /// The settings for this multiplex program.
        public let multiplexProgramSettings: MultiplexProgramSettings?
        /// The packet identifier map for this multiplex program.
        public let packetIdentifiersMap: MultiplexProgramPacketIdentifiersMap?
        /// Contains information about the current sources for the specified program in the specified multiplex. Keep in mind that each multiplex pipeline connects to both pipelines in a given source channel (the channel identified by the program). But only one of those channel pipelines is ever active at one time.
        public let pipelineDetails: [MultiplexProgramPipelineDetail]?
        /// The name of the multiplex program.
        public let programName: String?

        @inlinable
        public init(channelId: String? = nil, multiplexProgramSettings: MultiplexProgramSettings? = nil, packetIdentifiersMap: MultiplexProgramPacketIdentifiersMap? = nil, pipelineDetails: [MultiplexProgramPipelineDetail]? = nil, programName: String? = nil) {
            self.channelId = channelId
            self.multiplexProgramSettings = multiplexProgramSettings
            self.packetIdentifiersMap = packetIdentifiersMap
            self.pipelineDetails = pipelineDetails
            self.programName = programName
        }

        private enum CodingKeys: String, CodingKey {
            case channelId = "channelId"
            case multiplexProgramSettings = "multiplexProgramSettings"
            case packetIdentifiersMap = "packetIdentifiersMap"
            case pipelineDetails = "pipelineDetails"
            case programName = "programName"
        }
    }

    public struct DescribeMultiplexRequest: AWSEncodableShape {
        /// The ID of the multiplex.
        public let multiplexId: String

        @inlinable
        public init(multiplexId: String) {
            self.multiplexId = multiplexId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.multiplexId, key: "MultiplexId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeMultiplexResponse: AWSDecodableShape {
        /// The unique arn of the multiplex.
        public let arn: String?
        /// A list of availability zones for the multiplex.
        public let availabilityZones: [String]?
        /// A list of the multiplex output destinations.
        public let destinations: [MultiplexOutputDestination]?
        /// The unique id of the multiplex.
        public let id: String?
        /// Configuration for a multiplex event.
        public let multiplexSettings: MultiplexSettings?
        /// The name of the multiplex.
        public let name: String?
        /// The number of currently healthy pipelines.
        public let pipelinesRunningCount: Int?
        /// The number of programs in the multiplex.
        public let programCount: Int?
        /// The current state of the multiplex.
        public let state: MultiplexState?
        /// A collection of key-value pairs.
        public let tags: [String: String]?

        @inlinable
        public init(arn: String? = nil, availabilityZones: [String]? = nil, destinations: [MultiplexOutputDestination]? = nil, id: String? = nil, multiplexSettings: MultiplexSettings? = nil, name: String? = nil, pipelinesRunningCount: Int? = nil, programCount: Int? = nil, state: MultiplexState? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.availabilityZones = availabilityZones
            self.destinations = destinations
            self.id = id
            self.multiplexSettings = multiplexSettings
            self.name = name
            self.pipelinesRunningCount = pipelinesRunningCount
            self.programCount = programCount
            self.state = state
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case availabilityZones = "availabilityZones"
            case destinations = "destinations"
            case id = "id"
            case multiplexSettings = "multiplexSettings"
            case name = "name"
            case pipelinesRunningCount = "pipelinesRunningCount"
            case programCount = "programCount"
            case state = "state"
            case tags = "tags"
        }
    }

    public struct DescribeNetworkRequest: AWSEncodableShape {
        /// The ID of the network.
        public let networkId: String

        @inlinable
        public init(networkId: String) {
            self.networkId = networkId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.networkId, key: "NetworkId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeNetworkResponse: AWSDecodableShape {
        /// The ARN of this Network. It is automatically assigned when the Network is created.
        public let arn: String?
        public let associatedClusterIds: [String]?
        /// The ID of the Network. Unique in the AWS account. The ID is the resource-id portion of the ARN.
        public let id: String?
        /// An array of IpPools in your organization's network that identify a collection of IP addresses in this network that are reserved for use in MediaLive Anywhere. MediaLive Anywhere uses these IP addresses for Push inputs (in both Bridge and NAT networks) and for output destinations (only in Bridge networks). Each IpPool specifies one CIDR block.
        public let ipPools: [IpPool]?
        /// The name that you specified for the Network.
        public let name: String?
        /// An array of routes that MediaLive Anywhere needs to know about in order to route encoding traffic.
        public let routes: [Route]?
        /// The current state of the Network. Only MediaLive Anywhere can change the state.
        public let state: NetworkState?

        @inlinable
        public init(arn: String? = nil, associatedClusterIds: [String]? = nil, id: String? = nil, ipPools: [IpPool]? = nil, name: String? = nil, routes: [Route]? = nil, state: NetworkState? = nil) {
            self.arn = arn
            self.associatedClusterIds = associatedClusterIds
            self.id = id
            self.ipPools = ipPools
            self.name = name
            self.routes = routes
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case associatedClusterIds = "associatedClusterIds"
            case id = "id"
            case ipPools = "ipPools"
            case name = "name"
            case routes = "routes"
            case state = "state"
        }
    }

    public struct DescribeNetworkSummary: AWSDecodableShape {
        /// The ARN of this Network. It is automatically assigned when the Network is created.
        public let arn: String?
        public let associatedClusterIds: [String]?
        /// The ID of the Network. Unique in the AWS account. The ID is the resource-id portion of the ARN.
        public let id: String?
        /// An array of IpPools in your organization's network that identify a collection of IP addresses in your organization's network that are reserved for use in MediaLive Anywhere. MediaLive Anywhere uses these IP addresses for Push inputs (in both Bridge and NAT networks) and for output destinations (only in Bridge networks). Each IpPool specifies one CIDR block.
        public let ipPools: [IpPool]?
        /// The name that you specified for this Network.
        public let name: String?
        /// An array of routes that MediaLive Anywhere needs to know about in order to route encoding traffic.
        public let routes: [Route]?
        /// The current state of the Network. Only MediaLive Anywhere can change the state.
        public let state: NetworkState?

        @inlinable
        public init(arn: String? = nil, associatedClusterIds: [String]? = nil, id: String? = nil, ipPools: [IpPool]? = nil, name: String? = nil, routes: [Route]? = nil, state: NetworkState? = nil) {
            self.arn = arn
            self.associatedClusterIds = associatedClusterIds
            self.id = id
            self.ipPools = ipPools
            self.name = name
            self.routes = routes
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case associatedClusterIds = "associatedClusterIds"
            case id = "id"
            case ipPools = "ipPools"
            case name = "name"
            case routes = "routes"
            case state = "state"
        }
    }

    public struct DescribeNodeRequest: AWSEncodableShape {
        /// The ID of the cluster
        public let clusterId: String
        /// The ID of the node.
        public let nodeId: String

        @inlinable
        public init(clusterId: String, nodeId: String) {
            self.clusterId = clusterId
            self.nodeId = nodeId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.clusterId, key: "ClusterId")
            request.encodePath(self.nodeId, key: "NodeId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeNodeResponse: AWSDecodableShape {
        /// The ARN of the Node. It is automatically assigned when the Node is created.
        public let arn: String?
        /// An array of IDs. Each ID is one ChannelPlacementGroup that is associated with this Node. Empty if the Node is not yet associated with any groups.
        public let channelPlacementGroups: [String]?
        /// The ID of the Cluster that the Node belongs to.
        public let clusterId: String?
        /// The current connection state of the Node.
        public let connectionState: NodeConnectionState?
        /// The unique ID of the Node. Unique in the Cluster. The ID is the resource-id portion of the ARN.
        public let id: String?
        /// The ARN of the EC2 instance hosting the Node.
        public let instanceArn: String?
        /// The name that you specified for the Node.
        public let name: String?
        /// Documentation update needed
        public let nodeInterfaceMappings: [NodeInterfaceMapping]?
        /// The initial role current role of the Node in the Cluster. ACTIVE means the Node is available for encoding. BACKUP means the Node is a redundant Node and might get used if an ACTIVE Node fails.
        public let role: NodeRole?
        /// An array of SDI source mappings. Each mapping connects one logical SdiSource to the physical SDI card and port that the physical SDI source uses.
        public let sdiSourceMappings: [SdiSourceMapping]?
        /// The current state of the Node.
        public let state: NodeState?

        @inlinable
        public init(arn: String? = nil, channelPlacementGroups: [String]? = nil, clusterId: String? = nil, connectionState: NodeConnectionState? = nil, id: String? = nil, instanceArn: String? = nil, name: String? = nil, nodeInterfaceMappings: [NodeInterfaceMapping]? = nil, role: NodeRole? = nil, sdiSourceMappings: [SdiSourceMapping]? = nil, state: NodeState? = nil) {
            self.arn = arn
            self.channelPlacementGroups = channelPlacementGroups
            self.clusterId = clusterId
            self.connectionState = connectionState
            self.id = id
            self.instanceArn = instanceArn
            self.name = name
            self.nodeInterfaceMappings = nodeInterfaceMappings
            self.role = role
            self.sdiSourceMappings = sdiSourceMappings
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case channelPlacementGroups = "channelPlacementGroups"
            case clusterId = "clusterId"
            case connectionState = "connectionState"
            case id = "id"
            case instanceArn = "instanceArn"
            case name = "name"
            case nodeInterfaceMappings = "nodeInterfaceMappings"
            case role = "role"
            case sdiSourceMappings = "sdiSourceMappings"
            case state = "state"
        }
    }

    public struct DescribeNodeSummary: AWSDecodableShape {
        /// The ARN of the Node. It is automatically assigned when the Node is created.
        public let arn: String?
        /// An array of IDs. Each ID is one ChannelPlacementGroup that is associated with this Node. Empty if the Node is not yet associated with any groups.
        public let channelPlacementGroups: [String]?
        /// The ID of the Cluster that the Node belongs to.
        public let clusterId: String?
        /// The current connection state of the Node.
        public let connectionState: NodeConnectionState?
        /// The unique ID of the Node. Unique in the Cluster. The ID is the resource-id portion of the ARN.
        public let id: String?
        /// The EC2 ARN of the Instance associated with the Node.
        public let instanceArn: String?
        /// At the routing layer will get it from the callerId/context for use with bring your own device.
        public let managedInstanceId: String?
        /// The name that you specified for the Node.
        public let name: String?
        /// Documentation update needed
        public let nodeInterfaceMappings: [NodeInterfaceMapping]?
        /// The initial role current role of the Node in the Cluster. ACTIVE means the Node is available for encoding. BACKUP means the Node is a redundant Node and might get used if an ACTIVE Node fails.
        public let role: NodeRole?
        /// An array of SDI source mappings. Each mapping connects one logical SdiSource to the physical SDI card and port that the physical SDI source uses.
        public let sdiSourceMappings: [SdiSourceMapping]?
        /// The current state of the Node.
        public let state: NodeState?

        @inlinable
        public init(arn: String? = nil, channelPlacementGroups: [String]? = nil, clusterId: String? = nil, connectionState: NodeConnectionState? = nil, id: String? = nil, instanceArn: String? = nil, managedInstanceId: String? = nil, name: String? = nil, nodeInterfaceMappings: [NodeInterfaceMapping]? = nil, role: NodeRole? = nil, sdiSourceMappings: [SdiSourceMapping]? = nil, state: NodeState? = nil) {
            self.arn = arn
            self.channelPlacementGroups = channelPlacementGroups
            self.clusterId = clusterId
            self.connectionState = connectionState
            self.id = id
            self.instanceArn = instanceArn
            self.managedInstanceId = managedInstanceId
            self.name = name
            self.nodeInterfaceMappings = nodeInterfaceMappings
            self.role = role
            self.sdiSourceMappings = sdiSourceMappings
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case channelPlacementGroups = "channelPlacementGroups"
            case clusterId = "clusterId"
            case connectionState = "connectionState"
            case id = "id"
            case instanceArn = "instanceArn"
            case managedInstanceId = "managedInstanceId"
            case name = "name"
            case nodeInterfaceMappings = "nodeInterfaceMappings"
            case role = "role"
            case sdiSourceMappings = "sdiSourceMappings"
            case state = "state"
        }
    }

    public struct DescribeOfferingRequest: AWSEncodableShape {
        /// Unique offering ID, e.g. '87654321'
        public let offeringId: String

        @inlinable
        public init(offeringId: String) {
            self.offeringId = offeringId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.offeringId, key: "OfferingId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeOfferingResponse: AWSDecodableShape {
        /// Unique offering ARN, e.g. 'arn:aws:medialive:us-west-2:123456789012:offering:87654321'
        public let arn: String?
        /// Currency code for usagePrice and fixedPrice in ISO-4217 format, e.g. 'USD'
        public let currencyCode: String?
        /// Lease duration, e.g. '12'
        public let duration: Int?
        /// Units for duration, e.g. 'MONTHS'
        public let durationUnits: OfferingDurationUnits?
        /// One-time charge for each reserved resource, e.g. '0.0' for a NO_UPFRONT offering
        public let fixedPrice: Double?
        /// Offering description, e.g. 'HD AVC output at 10-20 Mbps, 30 fps, and standard VQ in US West (Oregon)'
        public let offeringDescription: String?
        /// Unique offering ID, e.g. '87654321'
        public let offeringId: String?
        /// Offering type, e.g. 'NO_UPFRONT'
        public let offeringType: OfferingType?
        /// AWS region, e.g. 'us-west-2'
        public let region: String?
        /// Resource configuration details
        public let resourceSpecification: ReservationResourceSpecification?
        /// Recurring usage charge for each reserved resource, e.g. '157.0'
        public let usagePrice: Double?

        @inlinable
        public init(arn: String? = nil, currencyCode: String? = nil, duration: Int? = nil, durationUnits: OfferingDurationUnits? = nil, fixedPrice: Double? = nil, offeringDescription: String? = nil, offeringId: String? = nil, offeringType: OfferingType? = nil, region: String? = nil, resourceSpecification: ReservationResourceSpecification? = nil, usagePrice: Double? = nil) {
            self.arn = arn
            self.currencyCode = currencyCode
            self.duration = duration
            self.durationUnits = durationUnits
            self.fixedPrice = fixedPrice
            self.offeringDescription = offeringDescription
            self.offeringId = offeringId
            self.offeringType = offeringType
            self.region = region
            self.resourceSpecification = resourceSpecification
            self.usagePrice = usagePrice
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case currencyCode = "currencyCode"
            case duration = "duration"
            case durationUnits = "durationUnits"
            case fixedPrice = "fixedPrice"
            case offeringDescription = "offeringDescription"
            case offeringId = "offeringId"
            case offeringType = "offeringType"
            case region = "region"
            case resourceSpecification = "resourceSpecification"
            case usagePrice = "usagePrice"
        }
    }

    public struct DescribeReservationRequest: AWSEncodableShape {
        /// Unique reservation ID, e.g. '1234567'
        public let reservationId: String

        @inlinable
        public init(reservationId: String) {
            self.reservationId = reservationId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.reservationId, key: "ReservationId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeReservationResponse: AWSDecodableShape {
        /// Unique reservation ARN, e.g. 'arn:aws:medialive:us-west-2:123456789012:reservation:1234567'
        public let arn: String?
        /// Number of reserved resources
        public let count: Int?
        /// Currency code for usagePrice and fixedPrice in ISO-4217 format, e.g. 'USD'
        public let currencyCode: String?
        /// Lease duration, e.g. '12'
        public let duration: Int?
        /// Units for duration, e.g. 'MONTHS'
        public let durationUnits: OfferingDurationUnits?
        /// Reservation UTC end date and time in ISO-8601 format, e.g. '2019-03-01T00:00:00'
        public let end: String?
        /// One-time charge for each reserved resource, e.g. '0.0' for a NO_UPFRONT offering
        public let fixedPrice: Double?
        /// User specified reservation name
        public let name: String?
        /// Offering description, e.g. 'HD AVC output at 10-20 Mbps, 30 fps, and standard VQ in US West (Oregon)'
        public let offeringDescription: String?
        /// Unique offering ID, e.g. '87654321'
        public let offeringId: String?
        /// Offering type, e.g. 'NO_UPFRONT'
        public let offeringType: OfferingType?
        /// AWS region, e.g. 'us-west-2'
        public let region: String?
        /// Renewal settings for the reservation
        public let renewalSettings: RenewalSettings?
        /// Unique reservation ID, e.g. '1234567'
        public let reservationId: String?
        /// Resource configuration details
        public let resourceSpecification: ReservationResourceSpecification?
        /// Reservation UTC start date and time in ISO-8601 format, e.g. '2018-03-01T00:00:00'
        public let start: String?
        /// Current state of reservation, e.g. 'ACTIVE'
        public let state: ReservationState?
        /// A collection of key-value pairs
        public let tags: [String: String]?
        /// Recurring usage charge for each reserved resource, e.g. '157.0'
        public let usagePrice: Double?

        @inlinable
        public init(arn: String? = nil, count: Int? = nil, currencyCode: String? = nil, duration: Int? = nil, durationUnits: OfferingDurationUnits? = nil, end: String? = nil, fixedPrice: Double? = nil, name: String? = nil, offeringDescription: String? = nil, offeringId: String? = nil, offeringType: OfferingType? = nil, region: String? = nil, renewalSettings: RenewalSettings? = nil, reservationId: String? = nil, resourceSpecification: ReservationResourceSpecification? = nil, start: String? = nil, state: ReservationState? = nil, tags: [String: String]? = nil, usagePrice: Double? = nil) {
            self.arn = arn
            self.count = count
            self.currencyCode = currencyCode
            self.duration = duration
            self.durationUnits = durationUnits
            self.end = end
            self.fixedPrice = fixedPrice
            self.name = name
            self.offeringDescription = offeringDescription
            self.offeringId = offeringId
            self.offeringType = offeringType
            self.region = region
            self.renewalSettings = renewalSettings
            self.reservationId = reservationId
            self.resourceSpecification = resourceSpecification
            self.start = start
            self.state = state
            self.tags = tags
            self.usagePrice = usagePrice
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case count = "count"
            case currencyCode = "currencyCode"
            case duration = "duration"
            case durationUnits = "durationUnits"
            case end = "end"
            case fixedPrice = "fixedPrice"
            case name = "name"
            case offeringDescription = "offeringDescription"
            case offeringId = "offeringId"
            case offeringType = "offeringType"
            case region = "region"
            case renewalSettings = "renewalSettings"
            case reservationId = "reservationId"
            case resourceSpecification = "resourceSpecification"
            case start = "start"
            case state = "state"
            case tags = "tags"
            case usagePrice = "usagePrice"
        }
    }

    public struct DescribeScheduleRequest: AWSEncodableShape {
        /// Id of the channel whose schedule is being updated.
        public let channelId: String
        public let maxResults: Int?
        public let nextToken: String?

        @inlinable
        public init(channelId: String, maxResults: Int? = nil, nextToken: String? = nil) {
            self.channelId = channelId
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.channelId, key: "ChannelId")
            request.encodeQuery(self.maxResults, key: "maxResults")
            request.encodeQuery(self.nextToken, key: "nextToken")
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeScheduleResponse: AWSDecodableShape {
        /// The next token; for use in pagination.
        public let nextToken: String?
        /// The list of actions in the schedule.
        public let scheduleActions: [ScheduleAction]?

        @inlinable
        public init(nextToken: String? = nil, scheduleActions: [ScheduleAction]? = nil) {
            self.nextToken = nextToken
            self.scheduleActions = scheduleActions
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "nextToken"
            case scheduleActions = "scheduleActions"
        }
    }

    public struct DescribeSdiSourceRequest: AWSEncodableShape {
        /// Get details about an SdiSource.
        public let sdiSourceId: String

        @inlinable
        public init(sdiSourceId: String) {
            self.sdiSourceId = sdiSourceId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.sdiSourceId, key: "SdiSourceId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeSdiSourceResponse: AWSDecodableShape {
        /// Settings for the SDI source.
        public let sdiSource: SdiSource?

        @inlinable
        public init(sdiSource: SdiSource? = nil) {
            self.sdiSource = sdiSource
        }

        private enum CodingKeys: String, CodingKey {
            case sdiSource = "sdiSource"
        }
    }

    public struct DescribeThumbnailsRequest: AWSEncodableShape {
        /// Unique ID of the channel
        public let channelId: String
        /// Pipeline ID ("0" or "1")
        public let pipelineId: String?
        /// thumbnail type
        public let thumbnailType: String?

        @inlinable
        public init(channelId: String, pipelineId: String? = nil, thumbnailType: String? = nil) {
            self.channelId = channelId
            self.pipelineId = pipelineId
            self.thumbnailType = thumbnailType
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.channelId, key: "ChannelId")
            request.encodeQuery(self.pipelineId, key: "pipelineId")
            request.encodeQuery(self.thumbnailType, key: "thumbnailType")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeThumbnailsResponse: AWSDecodableShape {
        public let thumbnailDetails: [ThumbnailDetail]?

        @inlinable
        public init(thumbnailDetails: [ThumbnailDetail]? = nil) {
            self.thumbnailDetails = thumbnailDetails
        }

        private enum CodingKeys: String, CodingKey {
            case thumbnailDetails = "thumbnailDetails"
        }
    }

    public struct DolbyVision81Settings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct DvbNitSettings: AWSEncodableShape & AWSDecodableShape {
        /// The numeric value placed in the Network Information Table (NIT).
        public let networkId: Int?
        /// The network name text placed in the networkNameDescriptor inside the Network Information Table. Maximum length is 256 characters.
        public let networkName: String?
        /// The number of milliseconds between instances of this table in the output transport stream.
        public let repInterval: Int?

        @inlinable
        public init(networkId: Int? = nil, networkName: String? = nil, repInterval: Int? = nil) {
            self.networkId = networkId
            self.networkName = networkName
            self.repInterval = repInterval
        }

        public func validate(name: String) throws {
            try self.validate(self.networkId, name: "networkId", parent: name, max: 65536)
            try self.validate(self.networkId, name: "networkId", parent: name, min: 0)
            try self.validate(self.networkName, name: "networkName", parent: name, max: 256)
            try self.validate(self.networkName, name: "networkName", parent: name, min: 1)
            try self.validate(self.repInterval, name: "repInterval", parent: name, max: 10000)
            try self.validate(self.repInterval, name: "repInterval", parent: name, min: 25)
        }

        private enum CodingKeys: String, CodingKey {
            case networkId = "networkId"
            case networkName = "networkName"
            case repInterval = "repInterval"
        }
    }

    public struct DvbSdtSettings: AWSEncodableShape & AWSDecodableShape {
        /// Selects method of inserting SDT information into output stream. The sdtFollow setting copies SDT information from input stream to output stream. The sdtFollowIfPresent setting copies SDT information from input stream to output stream if SDT information is present in the input, otherwise it will fall back on the user-defined values. The sdtManual setting means user will enter the SDT information. The sdtNone setting means output stream will not contain SDT information.
        public let outputSdt: DvbSdtOutputSdt?
        /// The number of milliseconds between instances of this table in the output transport stream.
        public let repInterval: Int?
        /// The service name placed in the serviceDescriptor in the Service Description Table. Maximum length is 256 characters.
        public let serviceName: String?
        /// The service provider name placed in the serviceDescriptor in the Service Description Table. Maximum length is 256 characters.
        public let serviceProviderName: String?

        @inlinable
        public init(outputSdt: DvbSdtOutputSdt? = nil, repInterval: Int? = nil, serviceName: String? = nil, serviceProviderName: String? = nil) {
            self.outputSdt = outputSdt
            self.repInterval = repInterval
            self.serviceName = serviceName
            self.serviceProviderName = serviceProviderName
        }

        public func validate(name: String) throws {
            try self.validate(self.repInterval, name: "repInterval", parent: name, max: 2000)
            try self.validate(self.repInterval, name: "repInterval", parent: name, min: 25)
            try self.validate(self.serviceName, name: "serviceName", parent: name, max: 256)
            try self.validate(self.serviceName, name: "serviceName", parent: name, min: 1)
            try self.validate(self.serviceProviderName, name: "serviceProviderName", parent: name, max: 256)
            try self.validate(self.serviceProviderName, name: "serviceProviderName", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case outputSdt = "outputSdt"
            case repInterval = "repInterval"
            case serviceName = "serviceName"
            case serviceProviderName = "serviceProviderName"
        }
    }

    public struct DvbSubDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        /// If no explicit xPosition or yPosition is provided, setting alignment to centered will place the captions at the bottom center of the output. Similarly, setting a left alignment will align captions to the bottom left of the output. If x and y positions are given in conjunction with the alignment parameter, the font will be justified (either left or centered) relative to those coordinates. Selecting "smart" justification will left-justify live subtitles and center-justify pre-recorded subtitles.  This option is not valid for source captions that are STL or 608/embedded.  These source settings are already pre-defined by the caption stream.  All burn-in and DVB-Sub font settings must match.
        public let alignment: DvbSubDestinationAlignment?
        /// Specifies the color of the rectangle behind the captions.  All burn-in and DVB-Sub font settings must match.
        public let backgroundColor: DvbSubDestinationBackgroundColor?
        /// Specifies the opacity of the background rectangle. 255 is opaque; 0 is transparent. Leaving this parameter blank is equivalent to setting it to 0 (transparent).  All burn-in and DVB-Sub font settings must match.
        public let backgroundOpacity: Int?
        /// External font file used for caption burn-in. File extension must be 'ttf' or 'tte'.  Although the user can select output fonts for many different types of input captions, embedded, STL and teletext sources use a strict grid system. Using external fonts with these caption sources could cause unexpected display of proportional fonts.  All burn-in and DVB-Sub font settings must match.
        public let font: InputLocation?
        /// Specifies the color of the burned-in captions.  This option is not valid for source captions that are STL, 608/embedded or teletext.  These source settings are already pre-defined by the caption stream.  All burn-in and DVB-Sub font settings must match.
        public let fontColor: DvbSubDestinationFontColor?
        /// Specifies the opacity of the burned-in captions. 255 is opaque; 0 is transparent.  All burn-in and DVB-Sub font settings must match.
        public let fontOpacity: Int?
        /// Font resolution in DPI (dots per inch); default is 96 dpi.  All burn-in and DVB-Sub font settings must match.
        public let fontResolution: Int?
        /// When set to auto fontSize will scale depending on the size of the output.  Giving a positive integer will specify the exact font size in points.  All burn-in and DVB-Sub font settings must match.
        public let fontSize: String?
        /// Specifies font outline color. This option is not valid for source captions that are either 608/embedded or teletext. These source settings are already pre-defined by the caption stream. All burn-in and DVB-Sub font settings must match.
        public let outlineColor: DvbSubDestinationOutlineColor?
        /// Specifies font outline size in pixels. This option is not valid for source captions that are either 608/embedded or teletext. These source settings are already pre-defined by the caption stream. All burn-in and DVB-Sub font settings must match.
        public let outlineSize: Int?
        /// Specifies the color of the shadow cast by the captions.  All burn-in and DVB-Sub font settings must match.
        public let shadowColor: DvbSubDestinationShadowColor?
        /// Specifies the opacity of the shadow. 255 is opaque; 0 is transparent. Leaving this parameter blank is equivalent to setting it to 0 (transparent).  All burn-in and DVB-Sub font settings must match.
        public let shadowOpacity: Int?
        /// Specifies the horizontal offset of the shadow relative to the captions in pixels. A value of -2 would result in a shadow offset 2 pixels to the left.  All burn-in and DVB-Sub font settings must match.
        public let shadowXOffset: Int?
        /// Specifies the vertical offset of the shadow relative to the captions in pixels. A value of -2 would result in a shadow offset 2 pixels above the text.  All burn-in and DVB-Sub font settings must match.
        public let shadowYOffset: Int?
        /// Applies only when the input captions are Teletext and the output captions are DVB-Sub or Burn-In. Choose the number of lines for the captions bitmap. The captions bitmap is 700 wide × 576 high and will be laid over the video. For example, a value of 16 divides the bitmap into 16 lines, with each line 36 pixels high (16 × 36 = 576). The default is 24 (24 pixels high). Enter the same number in every encode in every output that converts the same Teletext source to DVB-Sub or Burn-in.
        public let subtitleRows: DvbSubDestinationSubtitleRows?
        /// Controls whether a fixed grid size will be used to generate the output subtitles bitmap. Only applicable for Teletext inputs and DVB-Sub/Burn-in outputs.
        public let teletextGridControl: DvbSubDestinationTeletextGridControl?
        /// Specifies the horizontal position of the caption relative to the left side of the output in pixels. A value of 10 would result in the captions starting 10 pixels from the left of the output. If no explicit xPosition is provided, the horizontal caption position will be determined by the alignment parameter.  This option is not valid for source captions that are STL, 608/embedded or teletext. These source settings are already pre-defined by the caption stream.  All burn-in and DVB-Sub font settings must match.
        public let xPosition: Int?
        /// Specifies the vertical position of the caption relative to the top of the output in pixels. A value of 10 would result in the captions starting 10 pixels from the top of the output. If no explicit yPosition is provided, the caption will be positioned towards the bottom of the output.  This option is not valid for source captions that are STL, 608/embedded or teletext.  These source settings are already pre-defined by the caption stream.  All burn-in and DVB-Sub font settings must match.
        public let yPosition: Int?

        @inlinable
        public init(alignment: DvbSubDestinationAlignment? = nil, backgroundColor: DvbSubDestinationBackgroundColor? = nil, backgroundOpacity: Int? = nil, font: InputLocation? = nil, fontColor: DvbSubDestinationFontColor? = nil, fontOpacity: Int? = nil, fontResolution: Int? = nil, fontSize: String? = nil, outlineColor: DvbSubDestinationOutlineColor? = nil, outlineSize: Int? = nil, shadowColor: DvbSubDestinationShadowColor? = nil, shadowOpacity: Int? = nil, shadowXOffset: Int? = nil, shadowYOffset: Int? = nil, subtitleRows: DvbSubDestinationSubtitleRows? = nil, teletextGridControl: DvbSubDestinationTeletextGridControl? = nil, xPosition: Int? = nil, yPosition: Int? = nil) {
            self.alignment = alignment
            self.backgroundColor = backgroundColor
            self.backgroundOpacity = backgroundOpacity
            self.font = font
            self.fontColor = fontColor
            self.fontOpacity = fontOpacity
            self.fontResolution = fontResolution
            self.fontSize = fontSize
            self.outlineColor = outlineColor
            self.outlineSize = outlineSize
            self.shadowColor = shadowColor
            self.shadowOpacity = shadowOpacity
            self.shadowXOffset = shadowXOffset
            self.shadowYOffset = shadowYOffset
            self.subtitleRows = subtitleRows
            self.teletextGridControl = teletextGridControl
            self.xPosition = xPosition
            self.yPosition = yPosition
        }

        public func validate(name: String) throws {
            try self.validate(self.backgroundOpacity, name: "backgroundOpacity", parent: name, max: 255)
            try self.validate(self.backgroundOpacity, name: "backgroundOpacity", parent: name, min: 0)
            try self.font?.validate(name: "\(name).font")
            try self.validate(self.fontOpacity, name: "fontOpacity", parent: name, max: 255)
            try self.validate(self.fontOpacity, name: "fontOpacity", parent: name, min: 0)
            try self.validate(self.fontResolution, name: "fontResolution", parent: name, max: 600)
            try self.validate(self.fontResolution, name: "fontResolution", parent: name, min: 96)
            try self.validate(self.outlineSize, name: "outlineSize", parent: name, max: 10)
            try self.validate(self.outlineSize, name: "outlineSize", parent: name, min: 0)
            try self.validate(self.shadowOpacity, name: "shadowOpacity", parent: name, max: 255)
            try self.validate(self.shadowOpacity, name: "shadowOpacity", parent: name, min: 0)
            try self.validate(self.xPosition, name: "xPosition", parent: name, min: 0)
            try self.validate(self.yPosition, name: "yPosition", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case alignment = "alignment"
            case backgroundColor = "backgroundColor"
            case backgroundOpacity = "backgroundOpacity"
            case font = "font"
            case fontColor = "fontColor"
            case fontOpacity = "fontOpacity"
            case fontResolution = "fontResolution"
            case fontSize = "fontSize"
            case outlineColor = "outlineColor"
            case outlineSize = "outlineSize"
            case shadowColor = "shadowColor"
            case shadowOpacity = "shadowOpacity"
            case shadowXOffset = "shadowXOffset"
            case shadowYOffset = "shadowYOffset"
            case subtitleRows = "subtitleRows"
            case teletextGridControl = "teletextGridControl"
            case xPosition = "xPosition"
            case yPosition = "yPosition"
        }
    }

    public struct DvbSubSourceSettings: AWSEncodableShape & AWSDecodableShape {
        /// If you will configure a WebVTT caption description that references this caption selector, use this field to
        /// provide the language to consider when translating the image-based source to text.
        public let ocrLanguage: DvbSubOcrLanguage?
        /// When using DVB-Sub with Burn-In or SMPTE-TT, use this PID for the source content. Unused for DVB-Sub passthrough. All DVB-Sub content is passed through, regardless of selectors.
        public let pid: Int?

        @inlinable
        public init(ocrLanguage: DvbSubOcrLanguage? = nil, pid: Int? = nil) {
            self.ocrLanguage = ocrLanguage
            self.pid = pid
        }

        public func validate(name: String) throws {
            try self.validate(self.pid, name: "pid", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case ocrLanguage = "ocrLanguage"
            case pid = "pid"
        }
    }

    public struct DvbTdtSettings: AWSEncodableShape & AWSDecodableShape {
        /// The number of milliseconds between instances of this table in the output transport stream.
        public let repInterval: Int?

        @inlinable
        public init(repInterval: Int? = nil) {
            self.repInterval = repInterval
        }

        public func validate(name: String) throws {
            try self.validate(self.repInterval, name: "repInterval", parent: name, max: 30000)
            try self.validate(self.repInterval, name: "repInterval", parent: name, min: 1000)
        }

        private enum CodingKeys: String, CodingKey {
            case repInterval = "repInterval"
        }
    }

    public struct Eac3AtmosSettings: AWSEncodableShape & AWSDecodableShape {
        /// Average bitrate in bits/second. Valid bitrates depend on the coding mode.
        public let bitrate: Double?
        /// Dolby Digital Plus with Dolby Atmos coding mode. Determines number of channels.
        public let codingMode: Eac3AtmosCodingMode?
        /// Sets the dialnorm for the output. Default 23.
        public let dialnorm: Int?
        /// Sets the Dolby dynamic range compression profile.
        public let drcLine: Eac3AtmosDrcLine?
        /// Sets the profile for heavy Dolby dynamic range compression, ensures that the instantaneous signal peaks do not exceed specified levels.
        public let drcRf: Eac3AtmosDrcRf?
        /// Height dimensional trim. Sets the maximum amount to attenuate the height channels when the downstream player isn??t configured to handle Dolby Digital Plus with Dolby Atmos and must remix the channels.
        public let heightTrim: Double?
        /// Surround dimensional trim. Sets the maximum amount to attenuate the surround channels when the downstream player isn't configured to handle Dolby Digital Plus with Dolby Atmos and must remix the channels.
        public let surroundTrim: Double?

        @inlinable
        public init(bitrate: Double? = nil, codingMode: Eac3AtmosCodingMode? = nil, dialnorm: Int? = nil, drcLine: Eac3AtmosDrcLine? = nil, drcRf: Eac3AtmosDrcRf? = nil, heightTrim: Double? = nil, surroundTrim: Double? = nil) {
            self.bitrate = bitrate
            self.codingMode = codingMode
            self.dialnorm = dialnorm
            self.drcLine = drcLine
            self.drcRf = drcRf
            self.heightTrim = heightTrim
            self.surroundTrim = surroundTrim
        }

        public func validate(name: String) throws {
            try self.validate(self.dialnorm, name: "dialnorm", parent: name, max: 31)
            try self.validate(self.dialnorm, name: "dialnorm", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case bitrate = "bitrate"
            case codingMode = "codingMode"
            case dialnorm = "dialnorm"
            case drcLine = "drcLine"
            case drcRf = "drcRf"
            case heightTrim = "heightTrim"
            case surroundTrim = "surroundTrim"
        }
    }

    public struct Eac3Settings: AWSEncodableShape & AWSDecodableShape {
        /// When set to attenuate3Db, applies a 3 dB attenuation to the surround channels. Only used for 3/2 coding mode.
        public let attenuationControl: Eac3AttenuationControl?
        /// Average bitrate in bits/second. Valid bitrates depend on the coding mode.
        public let bitrate: Double?
        /// Specifies the bitstream mode (bsmod) for the emitted E-AC-3 stream. See ATSC A/52-2012 (Annex E) for background on these values.
        public let bitstreamMode: Eac3BitstreamMode?
        /// Dolby Digital Plus coding mode. Determines number of channels.
        public let codingMode: Eac3CodingMode?
        /// When set to enabled, activates a DC highpass filter for all input channels.
        public let dcFilter: Eac3DcFilter?
        /// Sets the dialnorm for the output. If blank and input audio is Dolby Digital Plus, dialnorm will be passed through.
        public let dialnorm: Int?
        /// Sets the Dolby dynamic range compression profile.
        public let drcLine: Eac3DrcLine?
        /// Sets the profile for heavy Dolby dynamic range compression, ensures that the instantaneous signal peaks do not exceed specified levels.
        public let drcRf: Eac3DrcRf?
        /// When encoding 3/2 audio, setting to lfe enables the LFE channel
        public let lfeControl: Eac3LfeControl?
        /// When set to enabled, applies a 120Hz lowpass filter to the LFE channel prior to encoding. Only valid with codingMode32 coding mode.
        public let lfeFilter: Eac3LfeFilter?
        /// Left only/Right only center mix level. Only used for 3/2 coding mode.
        public let loRoCenterMixLevel: Double?
        /// Left only/Right only surround mix level. Only used for 3/2 coding mode.
        public let loRoSurroundMixLevel: Double?
        /// Left total/Right total center mix level. Only used for 3/2 coding mode.
        public let ltRtCenterMixLevel: Double?
        /// Left total/Right total surround mix level. Only used for 3/2 coding mode.
        public let ltRtSurroundMixLevel: Double?
        /// When set to followInput, encoder metadata will be sourced from the DD, DD+, or DolbyE decoder that supplied this audio data. If audio was not supplied from one of these streams, then the static metadata settings will be used.
        public let metadataControl: Eac3MetadataControl?
        /// When set to whenPossible, input DD+ audio will be passed through if it is present on the input. This detection is dynamic over the life of the transcode. Inputs that alternate between DD+ and non-DD+ content will have a consistent DD+ output as the system alternates between passthrough and encoding.
        public let passthroughControl: Eac3PassthroughControl?
        /// When set to shift90Degrees, applies a 90-degree phase shift to the surround channels. Only used for 3/2 coding mode.
        public let phaseControl: Eac3PhaseControl?
        /// Stereo downmix preference. Only used for 3/2 coding mode.
        public let stereoDownmix: Eac3StereoDownmix?
        /// When encoding 3/2 audio, sets whether an extra center back surround channel is matrix encoded into the left and right surround channels.
        public let surroundExMode: Eac3SurroundExMode?
        /// When encoding 2/0 audio, sets whether Dolby Surround is matrix encoded into the two channels.
        public let surroundMode: Eac3SurroundMode?

        @inlinable
        public init(attenuationControl: Eac3AttenuationControl? = nil, bitrate: Double? = nil, bitstreamMode: Eac3BitstreamMode? = nil, codingMode: Eac3CodingMode? = nil, dcFilter: Eac3DcFilter? = nil, dialnorm: Int? = nil, drcLine: Eac3DrcLine? = nil, drcRf: Eac3DrcRf? = nil, lfeControl: Eac3LfeControl? = nil, lfeFilter: Eac3LfeFilter? = nil, loRoCenterMixLevel: Double? = nil, loRoSurroundMixLevel: Double? = nil, ltRtCenterMixLevel: Double? = nil, ltRtSurroundMixLevel: Double? = nil, metadataControl: Eac3MetadataControl? = nil, passthroughControl: Eac3PassthroughControl? = nil, phaseControl: Eac3PhaseControl? = nil, stereoDownmix: Eac3StereoDownmix? = nil, surroundExMode: Eac3SurroundExMode? = nil, surroundMode: Eac3SurroundMode? = nil) {
            self.attenuationControl = attenuationControl
            self.bitrate = bitrate
            self.bitstreamMode = bitstreamMode
            self.codingMode = codingMode
            self.dcFilter = dcFilter
            self.dialnorm = dialnorm
            self.drcLine = drcLine
            self.drcRf = drcRf
            self.lfeControl = lfeControl
            self.lfeFilter = lfeFilter
            self.loRoCenterMixLevel = loRoCenterMixLevel
            self.loRoSurroundMixLevel = loRoSurroundMixLevel
            self.ltRtCenterMixLevel = ltRtCenterMixLevel
            self.ltRtSurroundMixLevel = ltRtSurroundMixLevel
            self.metadataControl = metadataControl
            self.passthroughControl = passthroughControl
            self.phaseControl = phaseControl
            self.stereoDownmix = stereoDownmix
            self.surroundExMode = surroundExMode
            self.surroundMode = surroundMode
        }

        public func validate(name: String) throws {
            try self.validate(self.dialnorm, name: "dialnorm", parent: name, max: 31)
            try self.validate(self.dialnorm, name: "dialnorm", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case attenuationControl = "attenuationControl"
            case bitrate = "bitrate"
            case bitstreamMode = "bitstreamMode"
            case codingMode = "codingMode"
            case dcFilter = "dcFilter"
            case dialnorm = "dialnorm"
            case drcLine = "drcLine"
            case drcRf = "drcRf"
            case lfeControl = "lfeControl"
            case lfeFilter = "lfeFilter"
            case loRoCenterMixLevel = "loRoCenterMixLevel"
            case loRoSurroundMixLevel = "loRoSurroundMixLevel"
            case ltRtCenterMixLevel = "ltRtCenterMixLevel"
            case ltRtSurroundMixLevel = "ltRtSurroundMixLevel"
            case metadataControl = "metadataControl"
            case passthroughControl = "passthroughControl"
            case phaseControl = "phaseControl"
            case stereoDownmix = "stereoDownmix"
            case surroundExMode = "surroundExMode"
            case surroundMode = "surroundMode"
        }
    }

    public struct EbuTtDDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        /// Complete this field if you want to include the name of the copyright holder in the copyright tag in the captions metadata.
        public let copyrightHolder: String?
        /// Specifies the default font size as a percentage of the computed cell size. Valid only if the defaultLineHeight is also set. If you leave this field empty, the default font size is 80% of the cell size.
        public let defaultFontSize: Int?
        /// Documentation update needed
        public let defaultLineHeight: Int?
        /// Specifies how to handle the gap between the lines (in multi-line captions). ENABLED: Fill with the captions background color (as specified in the input captions). DISABLED: Leave the gap unfilled
        public let fillLineGap: EbuTtDFillLineGapControl?
        /// Specifies the font family to include in the font data attached to the EBU-TT captions. Valid only if style_control is set to include. (If style_control is set to exclude, the font family is always set to monospaced.) Enter a list of font families, as a comma-separated list of font names, in order of preference. The name can be a font family (such as Arial), or a generic font family (such as serif), or default (to let the downstream player choose the font). Or leave blank to set the family to monospace. Note that you can specify only the font family. All other style information (color, bold, position and so on) is copied from the input captions. The size is always set to 100% to allow the downstream player to choose the size.
        public let fontFamily: String?
        /// Specifies the style information to include in the font data that is attached to the EBU-TT captions. INCLUDE: Take the style information from the source captions and include that information in the font data attached to the EBU-TT captions. This option is valid only if the source captions are Embedded or Teletext. EXCLUDE: Set the font family to monospaced. Do not include any other style information.
        public let styleControl: EbuTtDDestinationStyleControl?

        @inlinable
        public init(copyrightHolder: String? = nil, defaultFontSize: Int? = nil, defaultLineHeight: Int? = nil, fillLineGap: EbuTtDFillLineGapControl? = nil, fontFamily: String? = nil, styleControl: EbuTtDDestinationStyleControl? = nil) {
            self.copyrightHolder = copyrightHolder
            self.defaultFontSize = defaultFontSize
            self.defaultLineHeight = defaultLineHeight
            self.fillLineGap = fillLineGap
            self.fontFamily = fontFamily
            self.styleControl = styleControl
        }

        public func validate(name: String) throws {
            try self.validate(self.copyrightHolder, name: "copyrightHolder", parent: name, max: 1000)
            try self.validate(self.defaultFontSize, name: "defaultFontSize", parent: name, max: 800)
            try self.validate(self.defaultFontSize, name: "defaultFontSize", parent: name, min: 1)
            try self.validate(self.defaultLineHeight, name: "defaultLineHeight", parent: name, max: 800)
            try self.validate(self.defaultLineHeight, name: "defaultLineHeight", parent: name, min: 80)
        }

        private enum CodingKeys: String, CodingKey {
            case copyrightHolder = "copyrightHolder"
            case defaultFontSize = "defaultFontSize"
            case defaultLineHeight = "defaultLineHeight"
            case fillLineGap = "fillLineGap"
            case fontFamily = "fontFamily"
            case styleControl = "styleControl"
        }
    }

    public struct EmbeddedDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct EmbeddedPlusScte20DestinationSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct EmbeddedSourceSettings: AWSEncodableShape & AWSDecodableShape {
        /// If upconvert, 608 data is both passed through via the "608 compatibility bytes" fields of the 708 wrapper as well as translated into 708. 708 data present in the source content will be discarded.
        public let convert608To708: EmbeddedConvert608To708?
        /// Set to "auto" to handle streams with intermittent and/or non-aligned SCTE-20 and Embedded captions.
        public let scte20Detection: EmbeddedScte20Detection?
        /// Specifies the 608/708 channel number within the video track from which to extract captions. Unused for passthrough.
        public let source608ChannelNumber: Int?
        /// This field is unused and deprecated.
        public let source608TrackNumber: Int?

        @inlinable
        public init(convert608To708: EmbeddedConvert608To708? = nil, scte20Detection: EmbeddedScte20Detection? = nil, source608ChannelNumber: Int? = nil, source608TrackNumber: Int? = nil) {
            self.convert608To708 = convert608To708
            self.scte20Detection = scte20Detection
            self.source608ChannelNumber = source608ChannelNumber
            self.source608TrackNumber = source608TrackNumber
        }

        public func validate(name: String) throws {
            try self.validate(self.source608ChannelNumber, name: "source608ChannelNumber", parent: name, max: 4)
            try self.validate(self.source608ChannelNumber, name: "source608ChannelNumber", parent: name, min: 1)
            try self.validate(self.source608TrackNumber, name: "source608TrackNumber", parent: name, max: 5)
            try self.validate(self.source608TrackNumber, name: "source608TrackNumber", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case convert608To708 = "convert608To708"
            case scte20Detection = "scte20Detection"
            case source608ChannelNumber = "source608ChannelNumber"
            case source608TrackNumber = "source608TrackNumber"
        }
    }

    public struct EncoderSettings: AWSEncodableShape & AWSDecodableShape {
        public let audioDescriptions: [AudioDescription]?
        /// Settings for ad avail blanking.
        public let availBlanking: AvailBlanking?
        /// Event-wide configuration settings for ad avail insertion.
        public let availConfiguration: AvailConfiguration?
        /// Settings for blackout slate.
        public let blackoutSlate: BlackoutSlate?
        /// Settings for caption decriptions
        public let captionDescriptions: [CaptionDescription]?
        /// Color Correction Settings
        public let colorCorrectionSettings: ColorCorrectionSettings?
        /// Feature Activations
        public let featureActivations: FeatureActivations?
        /// Configuration settings that apply to the event as a whole.
        public let globalConfiguration: GlobalConfiguration?
        /// Settings for motion graphics.
        public let motionGraphicsConfiguration: MotionGraphicsConfiguration?
        /// Nielsen configuration settings.
        public let nielsenConfiguration: NielsenConfiguration?
        public let outputGroups: [OutputGroup]?
        /// Thumbnail configuration settings.
        public let thumbnailConfiguration: ThumbnailConfiguration?
        /// Contains settings used to acquire and adjust timecode information from inputs.
        public let timecodeConfig: TimecodeConfig?
        public let videoDescriptions: [VideoDescription]?

        @inlinable
        public init(audioDescriptions: [AudioDescription]? = nil, availBlanking: AvailBlanking? = nil, availConfiguration: AvailConfiguration? = nil, blackoutSlate: BlackoutSlate? = nil, captionDescriptions: [CaptionDescription]? = nil, colorCorrectionSettings: ColorCorrectionSettings? = nil, featureActivations: FeatureActivations? = nil, globalConfiguration: GlobalConfiguration? = nil, motionGraphicsConfiguration: MotionGraphicsConfiguration? = nil, nielsenConfiguration: NielsenConfiguration? = nil, outputGroups: [OutputGroup]? = nil, thumbnailConfiguration: ThumbnailConfiguration? = nil, timecodeConfig: TimecodeConfig? = nil, videoDescriptions: [VideoDescription]? = nil) {
            self.audioDescriptions = audioDescriptions
            self.availBlanking = availBlanking
            self.availConfiguration = availConfiguration
            self.blackoutSlate = blackoutSlate
            self.captionDescriptions = captionDescriptions
            self.colorCorrectionSettings = colorCorrectionSettings
            self.featureActivations = featureActivations
            self.globalConfiguration = globalConfiguration
            self.motionGraphicsConfiguration = motionGraphicsConfiguration
            self.nielsenConfiguration = nielsenConfiguration
            self.outputGroups = outputGroups
            self.thumbnailConfiguration = thumbnailConfiguration
            self.timecodeConfig = timecodeConfig
            self.videoDescriptions = videoDescriptions
        }

        public func validate(name: String) throws {
            try self.audioDescriptions?.forEach {
                try $0.validate(name: "\(name).audioDescriptions[]")
            }
            try self.availBlanking?.validate(name: "\(name).availBlanking")
            try self.availConfiguration?.validate(name: "\(name).availConfiguration")
            try self.blackoutSlate?.validate(name: "\(name).blackoutSlate")
            try self.captionDescriptions?.forEach {
                try $0.validate(name: "\(name).captionDescriptions[]")
            }
            try self.globalConfiguration?.validate(name: "\(name).globalConfiguration")
            try self.outputGroups?.forEach {
                try $0.validate(name: "\(name).outputGroups[]")
            }
            try self.timecodeConfig?.validate(name: "\(name).timecodeConfig")
            try self.videoDescriptions?.forEach {
                try $0.validate(name: "\(name).videoDescriptions[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case audioDescriptions = "audioDescriptions"
            case availBlanking = "availBlanking"
            case availConfiguration = "availConfiguration"
            case blackoutSlate = "blackoutSlate"
            case captionDescriptions = "captionDescriptions"
            case colorCorrectionSettings = "colorCorrectionSettings"
            case featureActivations = "featureActivations"
            case globalConfiguration = "globalConfiguration"
            case motionGraphicsConfiguration = "motionGraphicsConfiguration"
            case nielsenConfiguration = "nielsenConfiguration"
            case outputGroups = "outputGroups"
            case thumbnailConfiguration = "thumbnailConfiguration"
            case timecodeConfig = "timecodeConfig"
            case videoDescriptions = "videoDescriptions"
        }
    }

    public struct EpochLockingSettings: AWSEncodableShape & AWSDecodableShape {
        /// Optional. Enter a value here to use a custom epoch, instead of the standard epoch (which started at 1970-01-01T00:00:00 UTC). Specify the start time of the custom epoch, in YYYY-MM-DDTHH:MM:SS in UTC. The time must be 2000-01-01T00:00:00 or later. Always set the MM:SS portion to 00:00.
        public let customEpoch: String?
        /// Optional. Enter a time for the jam sync. The default is midnight UTC. When epoch locking is enabled, MediaLive performs a daily jam sync on every output encode to ensure timecodes don’t diverge from the wall clock. The jam sync applies only to encodes with frame rate of 29.97 or 59.94 FPS. To override, enter a time in HH:MM:SS in UTC. Always set the MM:SS portion to 00:00.
        public let jamSyncTime: String?

        @inlinable
        public init(customEpoch: String? = nil, jamSyncTime: String? = nil) {
            self.customEpoch = customEpoch
            self.jamSyncTime = jamSyncTime
        }

        private enum CodingKeys: String, CodingKey {
            case customEpoch = "customEpoch"
            case jamSyncTime = "jamSyncTime"
        }
    }

    public struct Esam: AWSEncodableShape & AWSDecodableShape {
        /// Sent as acquisitionPointIdentity to identify the MediaLive channel to the POIS.
        public let acquisitionPointId: String?
        /// When specified, this offset (in milliseconds) is added to the input Ad Avail PTS time. This only applies to embedded SCTE 104/35 messages and does not apply to OOB messages.
        public let adAvailOffset: Int?
        /// Documentation update needed
        public let passwordParam: String?
        /// The URL of the signal conditioner endpoint on the Placement Opportunity Information System (POIS). MediaLive sends SignalProcessingEvents here when SCTE-35 messages are read.
        public let poisEndpoint: String?
        /// Documentation update needed
        public let username: String?
        /// Optional data sent as zoneIdentity to identify the MediaLive channel to the POIS.
        public let zoneIdentity: String?

        @inlinable
        public init(acquisitionPointId: String? = nil, adAvailOffset: Int? = nil, passwordParam: String? = nil, poisEndpoint: String? = nil, username: String? = nil, zoneIdentity: String? = nil) {
            self.acquisitionPointId = acquisitionPointId
            self.adAvailOffset = adAvailOffset
            self.passwordParam = passwordParam
            self.poisEndpoint = poisEndpoint
            self.username = username
            self.zoneIdentity = zoneIdentity
        }

        public func validate(name: String) throws {
            try self.validate(self.acquisitionPointId, name: "acquisitionPointId", parent: name, max: 256)
            try self.validate(self.adAvailOffset, name: "adAvailOffset", parent: name, max: 1000)
            try self.validate(self.adAvailOffset, name: "adAvailOffset", parent: name, min: -1000)
            try self.validate(self.poisEndpoint, name: "poisEndpoint", parent: name, max: 2048)
            try self.validate(self.zoneIdentity, name: "zoneIdentity", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case acquisitionPointId = "acquisitionPointId"
            case adAvailOffset = "adAvailOffset"
            case passwordParam = "passwordParam"
            case poisEndpoint = "poisEndpoint"
            case username = "username"
            case zoneIdentity = "zoneIdentity"
        }
    }

    public struct EventBridgeRuleTemplateGroupSummary: AWSDecodableShape {
        /// An eventbridge rule template group's ARN (Amazon Resource Name)
        public let arn: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdAt: Date?
        /// A resource's optional description.
        public let description: String?
        /// An eventbridge rule template group's id. AWS provided template groups have ids that start with `aws-`
        public let id: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var modifiedAt: Date?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        public let tags: [String: String]?
        /// The number of templates in a group.
        public let templateCount: Int?

        @inlinable
        public init(arn: String? = nil, createdAt: Date? = nil, description: String? = nil, id: String? = nil, modifiedAt: Date? = nil, name: String? = nil, tags: [String: String]? = nil, templateCount: Int? = nil) {
            self.arn = arn
            self.createdAt = createdAt
            self.description = description
            self.id = id
            self.modifiedAt = modifiedAt
            self.name = name
            self.tags = tags
            self.templateCount = templateCount
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case createdAt = "createdAt"
            case description = "description"
            case id = "id"
            case modifiedAt = "modifiedAt"
            case name = "name"
            case tags = "tags"
            case templateCount = "templateCount"
        }
    }

    public struct EventBridgeRuleTemplateSummary: AWSDecodableShape {
        /// An eventbridge rule template's ARN (Amazon Resource Name)
        public let arn: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdAt: Date?
        /// A resource's optional description.
        public let description: String?
        /// The number of targets configured to send matching events.
        public let eventTargetCount: Int?
        public let eventType: EventBridgeRuleTemplateEventType?
        /// An eventbridge rule template group's id. AWS provided template groups have ids that start with `aws-`
        public let groupId: String?
        /// An eventbridge rule template's id. AWS provided templates have ids that start with `aws-`
        public let id: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var modifiedAt: Date?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        public let tags: [String: String]?

        @inlinable
        public init(arn: String? = nil, createdAt: Date? = nil, description: String? = nil, eventTargetCount: Int? = nil, eventType: EventBridgeRuleTemplateEventType? = nil, groupId: String? = nil, id: String? = nil, modifiedAt: Date? = nil, name: String? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.createdAt = createdAt
            self.description = description
            self.eventTargetCount = eventTargetCount
            self.eventType = eventType
            self.groupId = groupId
            self.id = id
            self.modifiedAt = modifiedAt
            self.name = name
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case createdAt = "createdAt"
            case description = "description"
            case eventTargetCount = "eventTargetCount"
            case eventType = "eventType"
            case groupId = "groupId"
            case id = "id"
            case modifiedAt = "modifiedAt"
            case name = "name"
            case tags = "tags"
        }
    }

    public struct EventBridgeRuleTemplateTarget: AWSEncodableShape & AWSDecodableShape {
        /// Target ARNs must be either an SNS topic or CloudWatch log group.
        public let arn: String?

        @inlinable
        public init(arn: String? = nil) {
            self.arn = arn
        }

        public func validate(name: String) throws {
            try self.validate(self.arn, name: "arn", parent: name, max: 2048)
            try self.validate(self.arn, name: "arn", parent: name, min: 1)
            try self.validate(self.arn, name: "arn", parent: name, pattern: "^arn.+$")
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
        }
    }

    public struct FailoverCondition: AWSEncodableShape & AWSDecodableShape {
        /// Failover condition type-specific settings.
        public let failoverConditionSettings: FailoverConditionSettings?

        @inlinable
        public init(failoverConditionSettings: FailoverConditionSettings? = nil) {
            self.failoverConditionSettings = failoverConditionSettings
        }

        public func validate(name: String) throws {
            try self.failoverConditionSettings?.validate(name: "\(name).failoverConditionSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case failoverConditionSettings = "failoverConditionSettings"
        }
    }

    public struct FailoverConditionSettings: AWSEncodableShape & AWSDecodableShape {
        /// MediaLive will perform a failover if the specified audio selector is silent for the specified period.
        public let audioSilenceSettings: AudioSilenceFailoverSettings?
        /// MediaLive will perform a failover if content is not detected in this input for the specified period.
        public let inputLossSettings: InputLossFailoverSettings?
        /// MediaLive will perform a failover if content is considered black for the specified period.
        public let videoBlackSettings: VideoBlackFailoverSettings?

        @inlinable
        public init(audioSilenceSettings: AudioSilenceFailoverSettings? = nil, inputLossSettings: InputLossFailoverSettings? = nil, videoBlackSettings: VideoBlackFailoverSettings? = nil) {
            self.audioSilenceSettings = audioSilenceSettings
            self.inputLossSettings = inputLossSettings
            self.videoBlackSettings = videoBlackSettings
        }

        public func validate(name: String) throws {
            try self.audioSilenceSettings?.validate(name: "\(name).audioSilenceSettings")
            try self.inputLossSettings?.validate(name: "\(name).inputLossSettings")
            try self.videoBlackSettings?.validate(name: "\(name).videoBlackSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case audioSilenceSettings = "audioSilenceSettings"
            case inputLossSettings = "inputLossSettings"
            case videoBlackSettings = "videoBlackSettings"
        }
    }

    public struct FeatureActivations: AWSEncodableShape & AWSDecodableShape {
        /// Enables the Input Prepare feature. You can create Input Prepare actions in the schedule only if this feature is enabled.
        /// If you disable the feature on an existing schedule, make sure that you first delete all input prepare actions from the schedule.
        public let inputPrepareScheduleActions: FeatureActivationsInputPrepareScheduleActions?
        /// Enables the output static image overlay feature. Enabling this feature allows you to send channel schedule updates
        /// to display/clear/modify image overlays on an output-by-output bases.
        public let outputStaticImageOverlayScheduleActions: FeatureActivationsOutputStaticImageOverlayScheduleActions?

        @inlinable
        public init(inputPrepareScheduleActions: FeatureActivationsInputPrepareScheduleActions? = nil, outputStaticImageOverlayScheduleActions: FeatureActivationsOutputStaticImageOverlayScheduleActions? = nil) {
            self.inputPrepareScheduleActions = inputPrepareScheduleActions
            self.outputStaticImageOverlayScheduleActions = outputStaticImageOverlayScheduleActions
        }

        private enum CodingKeys: String, CodingKey {
            case inputPrepareScheduleActions = "inputPrepareScheduleActions"
            case outputStaticImageOverlayScheduleActions = "outputStaticImageOverlayScheduleActions"
        }
    }

    public struct FecOutputSettings: AWSEncodableShape & AWSDecodableShape {
        /// Parameter D from SMPTE 2022-1. The height of the FEC protection matrix.  The number of transport stream packets per column error correction packet. Must be between 4 and 20, inclusive.
        public let columnDepth: Int?
        /// Enables column only or column and row based FEC
        public let includeFec: FecOutputIncludeFec?
        /// Parameter L from SMPTE 2022-1. The width of the FEC protection matrix.  Must be between 1 and 20, inclusive. If only Column FEC is used, then larger values increase robustness.  If Row FEC is used, then this is the number of transport stream packets per row error correction packet, and the value must be between 4 and 20, inclusive, if includeFec is columnAndRow. If includeFec is column, this value must be 1 to 20, inclusive.
        public let rowLength: Int?

        @inlinable
        public init(columnDepth: Int? = nil, includeFec: FecOutputIncludeFec? = nil, rowLength: Int? = nil) {
            self.columnDepth = columnDepth
            self.includeFec = includeFec
            self.rowLength = rowLength
        }

        public func validate(name: String) throws {
            try self.validate(self.columnDepth, name: "columnDepth", parent: name, max: 20)
            try self.validate(self.columnDepth, name: "columnDepth", parent: name, min: 4)
            try self.validate(self.rowLength, name: "rowLength", parent: name, max: 20)
            try self.validate(self.rowLength, name: "rowLength", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case columnDepth = "columnDepth"
            case includeFec = "includeFec"
            case rowLength = "rowLength"
        }
    }

    public struct FixedModeScheduleActionStartSettings: AWSEncodableShape & AWSDecodableShape {
        /// Start time for the action to start in the channel. (Not the time for the action to be added to the schedule: actions are always added to the schedule immediately.) UTC format: yyyy-mm-ddThh:mm:ss.nnnZ. All the letters are digits (for example, mm might be 01) except for the two constants "T" for time and "Z" for "UTC format".
        public let time: String?

        @inlinable
        public init(time: String? = nil) {
            self.time = time
        }

        private enum CodingKeys: String, CodingKey {
            case time = "time"
        }
    }

    public struct Fmp4HlsSettings: AWSEncodableShape & AWSDecodableShape {
        /// List all the audio groups that are used with the video output stream. Input all the audio GROUP-IDs that are associated to the video, separate by ','.
        public let audioRenditionSets: String?
        /// If set to passthrough, Nielsen inaudible tones for media tracking will be detected in the input audio and an equivalent ID3 tag will be inserted in the output.
        public let nielsenId3Behavior: Fmp4NielsenId3Behavior?
        /// Set to PASSTHROUGH to enable ID3 metadata insertion. To include metadata, you configure other parameters in the output group or individual outputs, or you add an ID3 action to the channel schedule.
        public let timedMetadataBehavior: Fmp4TimedMetadataBehavior?

        @inlinable
        public init(audioRenditionSets: String? = nil, nielsenId3Behavior: Fmp4NielsenId3Behavior? = nil, timedMetadataBehavior: Fmp4TimedMetadataBehavior? = nil) {
            self.audioRenditionSets = audioRenditionSets
            self.nielsenId3Behavior = nielsenId3Behavior
            self.timedMetadataBehavior = timedMetadataBehavior
        }

        private enum CodingKeys: String, CodingKey {
            case audioRenditionSets = "audioRenditionSets"
            case nielsenId3Behavior = "nielsenId3Behavior"
            case timedMetadataBehavior = "timedMetadataBehavior"
        }
    }

    public struct FollowModeScheduleActionStartSettings: AWSEncodableShape & AWSDecodableShape {
        /// Identifies whether this action starts relative to the start or relative to the end of the reference action.
        public let followPoint: FollowPoint?
        /// The action name of another action that this one refers to.
        public let referenceActionName: String?

        @inlinable
        public init(followPoint: FollowPoint? = nil, referenceActionName: String? = nil) {
            self.followPoint = followPoint
            self.referenceActionName = referenceActionName
        }

        private enum CodingKeys: String, CodingKey {
            case followPoint = "followPoint"
            case referenceActionName = "referenceActionName"
        }
    }

    public struct FrameCaptureCdnSettings: AWSEncodableShape & AWSDecodableShape {
        public let frameCaptureS3Settings: FrameCaptureS3Settings?

        @inlinable
        public init(frameCaptureS3Settings: FrameCaptureS3Settings? = nil) {
            self.frameCaptureS3Settings = frameCaptureS3Settings
        }

        private enum CodingKeys: String, CodingKey {
            case frameCaptureS3Settings = "frameCaptureS3Settings"
        }
    }

    public struct FrameCaptureGroupSettings: AWSEncodableShape & AWSDecodableShape {
        /// The destination for the frame capture files. Either the URI for an Amazon S3 bucket and object, plus a file name prefix (for example, s3ssl://sportsDelivery/highlights/20180820/curling-) or the URI for a MediaStore container, plus a file name prefix (for example, mediastoressl://sportsDelivery/20180820/curling-). The final file names consist of the prefix from the destination field (for example, "curling-") + name modifier + the counter (5 digits, starting from 00001) + extension (which is always .jpg).  For example, curling-low.00001.jpg
        public let destination: OutputLocationRef?
        /// Parameters that control interactions with the CDN.
        public let frameCaptureCdnSettings: FrameCaptureCdnSettings?

        @inlinable
        public init(destination: OutputLocationRef? = nil, frameCaptureCdnSettings: FrameCaptureCdnSettings? = nil) {
            self.destination = destination
            self.frameCaptureCdnSettings = frameCaptureCdnSettings
        }

        private enum CodingKeys: String, CodingKey {
            case destination = "destination"
            case frameCaptureCdnSettings = "frameCaptureCdnSettings"
        }
    }

    public struct FrameCaptureHlsSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct FrameCaptureOutputSettings: AWSEncodableShape & AWSDecodableShape {
        /// Required if the output group contains more than one output. This modifier forms part of the output file name.
        public let nameModifier: String?

        @inlinable
        public init(nameModifier: String? = nil) {
            self.nameModifier = nameModifier
        }

        private enum CodingKeys: String, CodingKey {
            case nameModifier = "nameModifier"
        }
    }

    public struct FrameCaptureS3Settings: AWSEncodableShape & AWSDecodableShape {
        /// Specify the canned ACL to apply to each S3 request. Defaults to none.
        public let cannedAcl: S3CannedAcl?

        @inlinable
        public init(cannedAcl: S3CannedAcl? = nil) {
            self.cannedAcl = cannedAcl
        }

        private enum CodingKeys: String, CodingKey {
            case cannedAcl = "cannedAcl"
        }
    }

    public struct FrameCaptureSettings: AWSEncodableShape & AWSDecodableShape {
        /// The frequency at which to capture frames for inclusion in the output. May be specified in either seconds or milliseconds, as specified by captureIntervalUnits.
        public let captureInterval: Int?
        /// Unit for the frame capture interval.
        public let captureIntervalUnits: FrameCaptureIntervalUnit?
        /// Timecode burn-in settings
        public let timecodeBurninSettings: TimecodeBurninSettings?

        @inlinable
        public init(captureInterval: Int? = nil, captureIntervalUnits: FrameCaptureIntervalUnit? = nil, timecodeBurninSettings: TimecodeBurninSettings? = nil) {
            self.captureInterval = captureInterval
            self.captureIntervalUnits = captureIntervalUnits
            self.timecodeBurninSettings = timecodeBurninSettings
        }

        public func validate(name: String) throws {
            try self.validate(self.captureInterval, name: "captureInterval", parent: name, max: 3600000)
            try self.validate(self.captureInterval, name: "captureInterval", parent: name, min: 1)
            try self.timecodeBurninSettings?.validate(name: "\(name).timecodeBurninSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case captureInterval = "captureInterval"
            case captureIntervalUnits = "captureIntervalUnits"
            case timecodeBurninSettings = "timecodeBurninSettings"
        }
    }

    public struct GetCloudWatchAlarmTemplateGroupRequest: AWSEncodableShape {
        /// A cloudwatch alarm template group's identifier. Can be either be its id or current name.
        public let identifier: String

        @inlinable
        public init(identifier: String) {
            self.identifier = identifier
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.identifier, key: "Identifier")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetCloudWatchAlarmTemplateGroupResponse: AWSDecodableShape {
        /// A cloudwatch alarm template group's ARN (Amazon Resource Name)
        public let arn: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdAt: Date?
        /// A resource's optional description.
        public let description: String?
        /// A cloudwatch alarm template group's id. AWS provided template groups have ids that start with `aws-`
        public let id: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var modifiedAt: Date?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        public let tags: [String: String]?

        @inlinable
        public init(arn: String? = nil, createdAt: Date? = nil, description: String? = nil, id: String? = nil, modifiedAt: Date? = nil, name: String? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.createdAt = createdAt
            self.description = description
            self.id = id
            self.modifiedAt = modifiedAt
            self.name = name
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case createdAt = "createdAt"
            case description = "description"
            case id = "id"
            case modifiedAt = "modifiedAt"
            case name = "name"
            case tags = "tags"
        }
    }

    public struct GetCloudWatchAlarmTemplateRequest: AWSEncodableShape {
        /// A cloudwatch alarm template's identifier. Can be either be its id or current name.
        public let identifier: String

        @inlinable
        public init(identifier: String) {
            self.identifier = identifier
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.identifier, key: "Identifier")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetCloudWatchAlarmTemplateResponse: AWSDecodableShape {
        /// A cloudwatch alarm template's ARN (Amazon Resource Name)
        public let arn: String?
        public let comparisonOperator: CloudWatchAlarmTemplateComparisonOperator?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdAt: Date?
        /// The number of datapoints within the evaluation period that must be breaching to trigger the alarm.
        public let datapointsToAlarm: Int?
        /// A resource's optional description.
        public let description: String?
        /// The number of periods over which data is compared to the specified threshold.
        public let evaluationPeriods: Int?
        /// A cloudwatch alarm template group's id. AWS provided template groups have ids that start with `aws-`
        public let groupId: String?
        /// A cloudwatch alarm template's id. AWS provided templates have ids that start with `aws-`
        public let id: String?
        /// The name of the metric associated with the alarm. Must be compatible with targetResourceType.
        public let metricName: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var modifiedAt: Date?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        /// The period, in seconds, over which the specified statistic is applied.
        public let period: Int?
        public let statistic: CloudWatchAlarmTemplateStatistic?
        public let tags: [String: String]?
        public let targetResourceType: CloudWatchAlarmTemplateTargetResourceType?
        /// The threshold value to compare with the specified statistic.
        public let threshold: Double?
        public let treatMissingData: CloudWatchAlarmTemplateTreatMissingData?

        @inlinable
        public init(arn: String? = nil, comparisonOperator: CloudWatchAlarmTemplateComparisonOperator? = nil, createdAt: Date? = nil, datapointsToAlarm: Int? = nil, description: String? = nil, evaluationPeriods: Int? = nil, groupId: String? = nil, id: String? = nil, metricName: String? = nil, modifiedAt: Date? = nil, name: String? = nil, period: Int? = nil, statistic: CloudWatchAlarmTemplateStatistic? = nil, tags: [String: String]? = nil, targetResourceType: CloudWatchAlarmTemplateTargetResourceType? = nil, threshold: Double? = nil, treatMissingData: CloudWatchAlarmTemplateTreatMissingData? = nil) {
            self.arn = arn
            self.comparisonOperator = comparisonOperator
            self.createdAt = createdAt
            self.datapointsToAlarm = datapointsToAlarm
            self.description = description
            self.evaluationPeriods = evaluationPeriods
            self.groupId = groupId
            self.id = id
            self.metricName = metricName
            self.modifiedAt = modifiedAt
            self.name = name
            self.period = period
            self.statistic = statistic
            self.tags = tags
            self.targetResourceType = targetResourceType
            self.threshold = threshold
            self.treatMissingData = treatMissingData
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case comparisonOperator = "comparisonOperator"
            case createdAt = "createdAt"
            case datapointsToAlarm = "datapointsToAlarm"
            case description = "description"
            case evaluationPeriods = "evaluationPeriods"
            case groupId = "groupId"
            case id = "id"
            case metricName = "metricName"
            case modifiedAt = "modifiedAt"
            case name = "name"
            case period = "period"
            case statistic = "statistic"
            case tags = "tags"
            case targetResourceType = "targetResourceType"
            case threshold = "threshold"
            case treatMissingData = "treatMissingData"
        }
    }

    public struct GetEventBridgeRuleTemplateGroupRequest: AWSEncodableShape {
        /// An eventbridge rule template group's identifier. Can be either be its id or current name.
        public let identifier: String

        @inlinable
        public init(identifier: String) {
            self.identifier = identifier
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.identifier, key: "Identifier")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetEventBridgeRuleTemplateGroupResponse: AWSDecodableShape {
        /// An eventbridge rule template group's ARN (Amazon Resource Name)
        public let arn: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdAt: Date?
        /// A resource's optional description.
        public let description: String?
        /// An eventbridge rule template group's id. AWS provided template groups have ids that start with `aws-`
        public let id: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var modifiedAt: Date?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        public let tags: [String: String]?

        @inlinable
        public init(arn: String? = nil, createdAt: Date? = nil, description: String? = nil, id: String? = nil, modifiedAt: Date? = nil, name: String? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.createdAt = createdAt
            self.description = description
            self.id = id
            self.modifiedAt = modifiedAt
            self.name = name
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case createdAt = "createdAt"
            case description = "description"
            case id = "id"
            case modifiedAt = "modifiedAt"
            case name = "name"
            case tags = "tags"
        }
    }

    public struct GetEventBridgeRuleTemplateRequest: AWSEncodableShape {
        /// An eventbridge rule template's identifier. Can be either be its id or current name.
        public let identifier: String

        @inlinable
        public init(identifier: String) {
            self.identifier = identifier
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.identifier, key: "Identifier")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetEventBridgeRuleTemplateResponse: AWSDecodableShape {
        /// An eventbridge rule template's ARN (Amazon Resource Name)
        public let arn: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdAt: Date?
        /// A resource's optional description.
        public let description: String?
        public let eventTargets: [EventBridgeRuleTemplateTarget]?
        public let eventType: EventBridgeRuleTemplateEventType?
        /// An eventbridge rule template group's id. AWS provided template groups have ids that start with `aws-`
        public let groupId: String?
        /// An eventbridge rule template's id. AWS provided templates have ids that start with `aws-`
        public let id: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var modifiedAt: Date?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        public let tags: [String: String]?

        @inlinable
        public init(arn: String? = nil, createdAt: Date? = nil, description: String? = nil, eventTargets: [EventBridgeRuleTemplateTarget]? = nil, eventType: EventBridgeRuleTemplateEventType? = nil, groupId: String? = nil, id: String? = nil, modifiedAt: Date? = nil, name: String? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.createdAt = createdAt
            self.description = description
            self.eventTargets = eventTargets
            self.eventType = eventType
            self.groupId = groupId
            self.id = id
            self.modifiedAt = modifiedAt
            self.name = name
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case createdAt = "createdAt"
            case description = "description"
            case eventTargets = "eventTargets"
            case eventType = "eventType"
            case groupId = "groupId"
            case id = "id"
            case modifiedAt = "modifiedAt"
            case name = "name"
            case tags = "tags"
        }
    }

    public struct GetSignalMapRequest: AWSEncodableShape {
        /// A signal map's identifier. Can be either be its id or current name.
        public let identifier: String

        @inlinable
        public init(identifier: String) {
            self.identifier = identifier
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.identifier, key: "Identifier")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetSignalMapResponse: AWSDecodableShape {
        /// A signal map's ARN (Amazon Resource Name)
        public let arn: String?
        public let cloudWatchAlarmTemplateGroupIds: [String]?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdAt: Date?
        /// A resource's optional description.
        public let description: String?
        /// A top-level supported AWS resource ARN to discovery a signal map from.
        public let discoveryEntryPointArn: String?
        /// Error message associated with a failed creation or failed update attempt of a signal map.
        public let errorMessage: String?
        public let eventBridgeRuleTemplateGroupIds: [String]?
        public let failedMediaResourceMap: [String: MediaResource]?
        /// A signal map's id.
        public let id: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var lastDiscoveredAt: Date?
        public let lastSuccessfulMonitorDeployment: SuccessfulMonitorDeployment?
        public let mediaResourceMap: [String: MediaResource]?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var modifiedAt: Date?
        /// If true, there are pending monitor changes for this signal map that can be deployed.
        public let monitorChangesPendingDeployment: Bool?
        public let monitorDeployment: MonitorDeployment?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        public let status: SignalMapStatus?
        public let tags: [String: String]?

        @inlinable
        public init(arn: String? = nil, cloudWatchAlarmTemplateGroupIds: [String]? = nil, createdAt: Date? = nil, description: String? = nil, discoveryEntryPointArn: String? = nil, errorMessage: String? = nil, eventBridgeRuleTemplateGroupIds: [String]? = nil, failedMediaResourceMap: [String: MediaResource]? = nil, id: String? = nil, lastDiscoveredAt: Date? = nil, lastSuccessfulMonitorDeployment: SuccessfulMonitorDeployment? = nil, mediaResourceMap: [String: MediaResource]? = nil, modifiedAt: Date? = nil, monitorChangesPendingDeployment: Bool? = nil, monitorDeployment: MonitorDeployment? = nil, name: String? = nil, status: SignalMapStatus? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.cloudWatchAlarmTemplateGroupIds = cloudWatchAlarmTemplateGroupIds
            self.createdAt = createdAt
            self.description = description
            self.discoveryEntryPointArn = discoveryEntryPointArn
            self.errorMessage = errorMessage
            self.eventBridgeRuleTemplateGroupIds = eventBridgeRuleTemplateGroupIds
            self.failedMediaResourceMap = failedMediaResourceMap
            self.id = id
            self.lastDiscoveredAt = lastDiscoveredAt
            self.lastSuccessfulMonitorDeployment = lastSuccessfulMonitorDeployment
            self.mediaResourceMap = mediaResourceMap
            self.modifiedAt = modifiedAt
            self.monitorChangesPendingDeployment = monitorChangesPendingDeployment
            self.monitorDeployment = monitorDeployment
            self.name = name
            self.status = status
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case cloudWatchAlarmTemplateGroupIds = "cloudWatchAlarmTemplateGroupIds"
            case createdAt = "createdAt"
            case description = "description"
            case discoveryEntryPointArn = "discoveryEntryPointArn"
            case errorMessage = "errorMessage"
            case eventBridgeRuleTemplateGroupIds = "eventBridgeRuleTemplateGroupIds"
            case failedMediaResourceMap = "failedMediaResourceMap"
            case id = "id"
            case lastDiscoveredAt = "lastDiscoveredAt"
            case lastSuccessfulMonitorDeployment = "lastSuccessfulMonitorDeployment"
            case mediaResourceMap = "mediaResourceMap"
            case modifiedAt = "modifiedAt"
            case monitorChangesPendingDeployment = "monitorChangesPendingDeployment"
            case monitorDeployment = "monitorDeployment"
            case name = "name"
            case status = "status"
            case tags = "tags"
        }
    }

    public struct GlobalConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// Value to set the initial audio gain for the Live Event.
        public let initialAudioGain: Int?
        /// Indicates the action to take when the current input completes (e.g. end-of-file). When switchAndLoopInputs is configured the encoder will restart at the beginning of the first input.  When "none" is configured the encoder will transcode either black, a solid color, or a user specified slate images per the "Input Loss Behavior" configuration until the next input switch occurs (which is controlled through the Channel Schedule API).
        public let inputEndAction: GlobalConfigurationInputEndAction?
        /// Settings for system actions when input is lost.
        public let inputLossBehavior: InputLossBehavior?
        /// Indicates how MediaLive pipelines are synchronized.
        /// PIPELINE_LOCKING - MediaLive will attempt to synchronize the output of each pipeline to the other.
        /// EPOCH_LOCKING - MediaLive will attempt to synchronize the output of each pipeline to the Unix epoch.
        /// DISABLED - MediaLive will not attempt to synchronize the output of pipelines. We advise against disabling output locking because it has negative side effects in most workflows. For more information, see the section about output locking (pipeline locking) in the Medialive user guide.
        public let outputLockingMode: GlobalConfigurationOutputLockingMode?
        /// Advanced output locking settings
        public let outputLockingSettings: OutputLockingSettings?
        /// Indicates whether the rate of frames emitted by the Live encoder should be paced by its system clock (which optionally may be locked to another source via NTP) or should be locked to the clock of the source that is providing the input stream.
        public let outputTimingSource: GlobalConfigurationOutputTimingSource?
        /// Adjusts video input buffer for streams with very low video framerates. This is commonly set to enabled for music channels with less than one video frame per second.
        public let supportLowFramerateInputs: GlobalConfigurationLowFramerateInputs?

        @inlinable
        public init(initialAudioGain: Int? = nil, inputEndAction: GlobalConfigurationInputEndAction? = nil, inputLossBehavior: InputLossBehavior? = nil, outputLockingMode: GlobalConfigurationOutputLockingMode? = nil, outputLockingSettings: OutputLockingSettings? = nil, outputTimingSource: GlobalConfigurationOutputTimingSource? = nil, supportLowFramerateInputs: GlobalConfigurationLowFramerateInputs? = nil) {
            self.initialAudioGain = initialAudioGain
            self.inputEndAction = inputEndAction
            self.inputLossBehavior = inputLossBehavior
            self.outputLockingMode = outputLockingMode
            self.outputLockingSettings = outputLockingSettings
            self.outputTimingSource = outputTimingSource
            self.supportLowFramerateInputs = supportLowFramerateInputs
        }

        public func validate(name: String) throws {
            try self.validate(self.initialAudioGain, name: "initialAudioGain", parent: name, max: 60)
            try self.validate(self.initialAudioGain, name: "initialAudioGain", parent: name, min: -60)
            try self.inputLossBehavior?.validate(name: "\(name).inputLossBehavior")
        }

        private enum CodingKeys: String, CodingKey {
            case initialAudioGain = "initialAudioGain"
            case inputEndAction = "inputEndAction"
            case inputLossBehavior = "inputLossBehavior"
            case outputLockingMode = "outputLockingMode"
            case outputLockingSettings = "outputLockingSettings"
            case outputTimingSource = "outputTimingSource"
            case supportLowFramerateInputs = "supportLowFramerateInputs"
        }
    }

    public struct H264ColorSpaceSettings: AWSEncodableShape & AWSDecodableShape {
        public let colorSpacePassthroughSettings: ColorSpacePassthroughSettings?
        public let rec601Settings: Rec601Settings?
        public let rec709Settings: Rec709Settings?

        @inlinable
        public init(colorSpacePassthroughSettings: ColorSpacePassthroughSettings? = nil, rec601Settings: Rec601Settings? = nil, rec709Settings: Rec709Settings? = nil) {
            self.colorSpacePassthroughSettings = colorSpacePassthroughSettings
            self.rec601Settings = rec601Settings
            self.rec709Settings = rec709Settings
        }

        private enum CodingKeys: String, CodingKey {
            case colorSpacePassthroughSettings = "colorSpacePassthroughSettings"
            case rec601Settings = "rec601Settings"
            case rec709Settings = "rec709Settings"
        }
    }

    public struct H264FilterSettings: AWSEncodableShape & AWSDecodableShape {
        public let bandwidthReductionFilterSettings: BandwidthReductionFilterSettings?
        public let temporalFilterSettings: TemporalFilterSettings?

        @inlinable
        public init(bandwidthReductionFilterSettings: BandwidthReductionFilterSettings? = nil, temporalFilterSettings: TemporalFilterSettings? = nil) {
            self.bandwidthReductionFilterSettings = bandwidthReductionFilterSettings
            self.temporalFilterSettings = temporalFilterSettings
        }

        private enum CodingKeys: String, CodingKey {
            case bandwidthReductionFilterSettings = "bandwidthReductionFilterSettings"
            case temporalFilterSettings = "temporalFilterSettings"
        }
    }

    public struct H264Settings: AWSEncodableShape & AWSDecodableShape {
        /// Enables or disables adaptive quantization (AQ), which is a technique MediaLive can apply to video on a frame-by-frame basis to produce more compression without losing quality. There are three types of adaptive quantization: spatial, temporal, and flicker. We recommend that you set the field to Auto. For more information about all the options, see the topic about video adaptive quantization in the MediaLive user guide.
        public let adaptiveQuantization: H264AdaptiveQuantization?
        /// Indicates that AFD values will be written into the output stream.  If afdSignaling is "auto", the system will try to preserve the input AFD value (in cases where multiple AFD values are valid). If set to "fixed", the AFD value will be the value configured in the fixedAfd parameter.
        public let afdSignaling: AfdSignaling?
        /// Average bitrate in bits/second. Required when the rate control mode is VBR or CBR. Not used for QVBR. In an MS Smooth output group, each output must have a unique value when its bitrate is rounded down to the nearest multiple of 1000.
        public let bitrate: Int?
        /// Percentage of the buffer that should initially be filled (HRD buffer model).
        public let bufFillPct: Int?
        /// Size of buffer (HRD buffer model) in bits.
        public let bufSize: Int?
        /// Includes colorspace metadata in the output.
        public let colorMetadata: H264ColorMetadata?
        /// Specify the type of color space to apply or choose to pass through. The default is to pass through the color space that is in the source.
        public let colorSpaceSettings: H264ColorSpaceSettings?
        /// Entropy encoding mode.  Use cabac (must be in Main or High profile) or cavlc.
        public let entropyEncoding: H264EntropyEncoding?
        /// Optional. Both filters reduce bandwidth by removing imperceptible details. You can enable one of the filters. We
        /// recommend that you try both filters and observe the results to decide which one to use.
        /// The Temporal Filter reduces bandwidth by removing imperceptible details in the content. It combines perceptual
        /// filtering and motion compensated temporal filtering (MCTF). It operates independently of the compression level.
        /// The Bandwidth Reduction filter is a perceptual filter located within the encoding loop. It adapts to the current
        /// compression level to filter imperceptible signals. This filter works only when the resolution is 1080p or lower.
        public let filterSettings: H264FilterSettings?
        /// Four bit AFD value to write on all frames of video in the output stream. Only valid when afdSignaling is set to 'Fixed'.
        public let fixedAfd: FixedAfd?
        /// Flicker AQ makes adjustments within each frame to reduce flicker or 'pop' on I-frames. The value to enter in this field depends on the value in the Adaptive quantization field. For more information, see the topic about video adaptive quantization in the MediaLive user guide.
        public let flickerAq: H264FlickerAq?
        /// This setting applies only when scan type is "interlaced." It controls whether coding is performed on a field basis or on a frame basis. (When the video is progressive, the coding is always performed on a frame basis.)
        /// enabled: Force MediaLive to code on a field basis, so that odd and even sets of fields are coded separately.
        /// disabled: Code the two sets of fields separately (on a field basis) or together (on a frame basis using PAFF), depending on what is most appropriate for the content.
        public let forceFieldPictures: H264ForceFieldPictures?
        /// This field indicates how the output video frame rate is specified.  If "specified" is selected then the output video frame rate is determined by framerateNumerator and framerateDenominator, else if "initializeFromSource" is selected then the output video frame rate will be set equal to the input video frame rate of the first input.
        public let framerateControl: H264FramerateControl?
        /// Framerate denominator.
        public let framerateDenominator: Int?
        /// Framerate numerator - framerate is a fraction, e.g. 24000 / 1001 = 23.976 fps.
        public let framerateNumerator: Int?
        /// Documentation update needed
        public let gopBReference: H264GopBReference?
        /// Frequency of closed GOPs. In streaming applications, it is recommended that this be set to 1 so a decoder joining mid-stream will receive an IDR frame as quickly as possible. Setting this value to 0 will break output segmenting.
        public let gopClosedCadence: Int?
        /// Number of B-frames between reference frames.
        public let gopNumBFrames: Int?
        /// GOP size (keyframe interval) in units of either frames or seconds per gopSizeUnits.
        /// If gopSizeUnits is frames, gopSize must be an integer and must be greater than or equal to 1.
        /// If gopSizeUnits is seconds, gopSize must be greater than 0, but need not be an integer.
        public let gopSize: Double?
        /// Indicates if the gopSize is specified in frames or seconds. If seconds the system will convert the gopSize into a frame count at run time.
        public let gopSizeUnits: H264GopSizeUnits?
        /// H.264 Level.
        public let level: H264Level?
        /// Amount of lookahead. A value of low can decrease latency and memory usage, while high can produce better quality for certain content.
        public let lookAheadRateControl: H264LookAheadRateControl?
        /// For QVBR: See the tooltip for Quality level
        /// For VBR: Set the maximum bitrate in order to accommodate expected spikes in the complexity of the video.
        public let maxBitrate: Int?
        /// Used for QVBR rate control mode only.
        /// Optional.
        /// Enter a minimum bitrate if you want to keep the output bitrate about a threshold, in order to prevent the downstream system from de-allocating network bandwidth for this output.
        public let minBitrate: Int?
        /// Only meaningful if sceneChangeDetect is set to enabled.  Defaults to 5 if multiplex rate control is used.  Enforces separation between repeated (cadence) I-frames and I-frames inserted by Scene Change Detection. If a scene change I-frame is within I-interval frames of a cadence I-frame, the GOP is shrunk and/or stretched to the scene change I-frame. GOP stretch requires enabling lookahead as well as setting I-interval. The normal cadence resumes for the next GOP. Note: Maximum GOP stretch = GOP size + Min-I-interval - 1
        public let minIInterval: Int?
        /// Sets the minimum QP. If you aren't familiar with quantization adjustment, leave the field empty. MediaLive will
        /// apply an appropriate value.
        public let minQp: Int?
        /// Number of reference frames to use. The encoder may use more than requested if using B-frames and/or interlaced encoding.
        public let numRefFrames: Int?
        /// This field indicates how the output pixel aspect ratio is specified.  If "specified" is selected then the output video pixel aspect ratio is determined by parNumerator and parDenominator, else if "initializeFromSource" is selected then the output pixsel aspect ratio will be set equal to the input video pixel aspect ratio of the first input.
        public let parControl: H264ParControl?
        /// Pixel Aspect Ratio denominator.
        public let parDenominator: Int?
        /// Pixel Aspect Ratio numerator.
        public let parNumerator: Int?
        /// H.264 Profile.
        public let profile: H264Profile?
        /// Leave as STANDARD_QUALITY or choose a different value (which might result in additional costs to run the channel).
        /// - ENHANCED_QUALITY: Produces a slightly better video quality without an increase in the bitrate. Has an effect only when the Rate control mode is QVBR or CBR. If this channel is in a MediaLive multiplex, the value must be ENHANCED_QUALITY.
        /// - STANDARD_QUALITY: Valid for any Rate control mode.
        public let qualityLevel: H264QualityLevel?
        /// Controls the target quality for the video encode. Applies only when the rate control mode is QVBR. You can set a target quality or you can let MediaLive determine the best quality. To set a target quality, enter values in the QVBR quality level field and the Max bitrate field. Enter values that suit your most important viewing devices. Recommended values are:
        /// - Primary screen: Quality level: 8 to 10. Max bitrate: 4M
        /// - PC or tablet: Quality level: 7. Max bitrate: 1.5M to 3M
        /// - Smartphone: Quality level: 6. Max bitrate: 1M to 1.5M
        /// To let MediaLive decide, leave the QVBR quality level field empty, and in Max bitrate enter the maximum rate you want in the video. For more information, see the section called "Video - rate control mode" in the MediaLive user guide
        public let qvbrQualityLevel: Int?
        /// Rate control mode.
        /// QVBR: Quality will match the specified quality level except when it is constrained by the
        /// maximum bitrate.  Recommended if you or your viewers pay for bandwidth.
        /// VBR: Quality and bitrate vary, depending on the video complexity. Recommended instead of QVBR
        /// if you want to maintain a specific average bitrate over the duration of the channel.
        /// CBR: Quality varies, depending on the video complexity. Recommended only if you distribute
        /// your assets to devices that cannot handle variable bitrates.
        /// Multiplex: This rate control mode is only supported (and is required) when the video is being
        /// delivered to a MediaLive Multiplex in which case the rate control configuration is controlled
        /// by the properties within the Multiplex Program.
        public let rateControlMode: H264RateControlMode?
        /// Sets the scan type of the output to progressive or top-field-first interlaced.
        public let scanType: H264ScanType?
        /// Scene change detection.
        /// - On: inserts I-frames when scene change is detected.
        /// - Off: does not force an I-frame when scene change is detected.
        public let sceneChangeDetect: H264SceneChangeDetect?
        /// Number of slices per picture. Must be less than or equal to the number of macroblock rows for progressive pictures, and less than or equal to half the number of macroblock rows for interlaced pictures.
        /// This field is optional; when no value is specified the encoder will choose the number of slices based on encode resolution.
        public let slices: Int?
        /// Softness. Selects quantizer matrix, larger values reduce high-frequency content in the encoded image.  If not set to zero, must be greater than 15.
        public let softness: Int?
        /// Spatial AQ makes adjustments within each frame based on spatial variation of content complexity. The value to enter in this field depends on the value in the Adaptive quantization field. For more information, see the topic about video adaptive quantization in the MediaLive user guide.
        public let spatialAq: H264SpatialAq?
        /// If set to fixed, use gopNumBFrames B-frames per sub-GOP. If set to dynamic, optimize the number of B-frames used for each sub-GOP to improve visual quality.
        public let subgopLength: H264SubGopLength?
        /// Produces a bitstream compliant with SMPTE RP-2027.
        public let syntax: H264Syntax?
        /// Temporal makes adjustments within each frame based on variations in content complexity over time. The value to enter in this field depends on the value in the Adaptive quantization field. For more information, see the topic about video adaptive quantization in the MediaLive user guide.
        public let temporalAq: H264TemporalAq?
        /// Timecode burn-in settings
        public let timecodeBurninSettings: TimecodeBurninSettings?
        /// Determines how timecodes should be inserted into the video elementary stream.
        /// - 'disabled': Do not include timecodes
        /// - 'picTimingSei': Pass through picture timing SEI messages from the source specified in Timecode Config
        public let timecodeInsertion: H264TimecodeInsertionBehavior?

        @inlinable
        public init(adaptiveQuantization: H264AdaptiveQuantization? = nil, afdSignaling: AfdSignaling? = nil, bitrate: Int? = nil, bufFillPct: Int? = nil, bufSize: Int? = nil, colorMetadata: H264ColorMetadata? = nil, colorSpaceSettings: H264ColorSpaceSettings? = nil, entropyEncoding: H264EntropyEncoding? = nil, filterSettings: H264FilterSettings? = nil, fixedAfd: FixedAfd? = nil, flickerAq: H264FlickerAq? = nil, forceFieldPictures: H264ForceFieldPictures? = nil, framerateControl: H264FramerateControl? = nil, framerateDenominator: Int? = nil, framerateNumerator: Int? = nil, gopBReference: H264GopBReference? = nil, gopClosedCadence: Int? = nil, gopNumBFrames: Int? = nil, gopSize: Double? = nil, gopSizeUnits: H264GopSizeUnits? = nil, level: H264Level? = nil, lookAheadRateControl: H264LookAheadRateControl? = nil, maxBitrate: Int? = nil, minBitrate: Int? = nil, minIInterval: Int? = nil, minQp: Int? = nil, numRefFrames: Int? = nil, parControl: H264ParControl? = nil, parDenominator: Int? = nil, parNumerator: Int? = nil, profile: H264Profile? = nil, qualityLevel: H264QualityLevel? = nil, qvbrQualityLevel: Int? = nil, rateControlMode: H264RateControlMode? = nil, scanType: H264ScanType? = nil, sceneChangeDetect: H264SceneChangeDetect? = nil, slices: Int? = nil, softness: Int? = nil, spatialAq: H264SpatialAq? = nil, subgopLength: H264SubGopLength? = nil, syntax: H264Syntax? = nil, temporalAq: H264TemporalAq? = nil, timecodeBurninSettings: TimecodeBurninSettings? = nil, timecodeInsertion: H264TimecodeInsertionBehavior? = nil) {
            self.adaptiveQuantization = adaptiveQuantization
            self.afdSignaling = afdSignaling
            self.bitrate = bitrate
            self.bufFillPct = bufFillPct
            self.bufSize = bufSize
            self.colorMetadata = colorMetadata
            self.colorSpaceSettings = colorSpaceSettings
            self.entropyEncoding = entropyEncoding
            self.filterSettings = filterSettings
            self.fixedAfd = fixedAfd
            self.flickerAq = flickerAq
            self.forceFieldPictures = forceFieldPictures
            self.framerateControl = framerateControl
            self.framerateDenominator = framerateDenominator
            self.framerateNumerator = framerateNumerator
            self.gopBReference = gopBReference
            self.gopClosedCadence = gopClosedCadence
            self.gopNumBFrames = gopNumBFrames
            self.gopSize = gopSize
            self.gopSizeUnits = gopSizeUnits
            self.level = level
            self.lookAheadRateControl = lookAheadRateControl
            self.maxBitrate = maxBitrate
            self.minBitrate = minBitrate
            self.minIInterval = minIInterval
            self.minQp = minQp
            self.numRefFrames = numRefFrames
            self.parControl = parControl
            self.parDenominator = parDenominator
            self.parNumerator = parNumerator
            self.profile = profile
            self.qualityLevel = qualityLevel
            self.qvbrQualityLevel = qvbrQualityLevel
            self.rateControlMode = rateControlMode
            self.scanType = scanType
            self.sceneChangeDetect = sceneChangeDetect
            self.slices = slices
            self.softness = softness
            self.spatialAq = spatialAq
            self.subgopLength = subgopLength
            self.syntax = syntax
            self.temporalAq = temporalAq
            self.timecodeBurninSettings = timecodeBurninSettings
            self.timecodeInsertion = timecodeInsertion
        }

        public func validate(name: String) throws {
            try self.validate(self.bitrate, name: "bitrate", parent: name, min: 1000)
            try self.validate(self.bufFillPct, name: "bufFillPct", parent: name, max: 100)
            try self.validate(self.bufFillPct, name: "bufFillPct", parent: name, min: 0)
            try self.validate(self.bufSize, name: "bufSize", parent: name, min: 0)
            try self.validate(self.framerateDenominator, name: "framerateDenominator", parent: name, min: 1)
            try self.validate(self.framerateNumerator, name: "framerateNumerator", parent: name, min: 1)
            try self.validate(self.gopClosedCadence, name: "gopClosedCadence", parent: name, min: 0)
            try self.validate(self.gopNumBFrames, name: "gopNumBFrames", parent: name, max: 7)
            try self.validate(self.gopNumBFrames, name: "gopNumBFrames", parent: name, min: 0)
            try self.validate(self.maxBitrate, name: "maxBitrate", parent: name, min: 1000)
            try self.validate(self.minBitrate, name: "minBitrate", parent: name, min: 0)
            try self.validate(self.minIInterval, name: "minIInterval", parent: name, max: 30)
            try self.validate(self.minIInterval, name: "minIInterval", parent: name, min: 0)
            try self.validate(self.minQp, name: "minQp", parent: name, max: 51)
            try self.validate(self.minQp, name: "minQp", parent: name, min: 1)
            try self.validate(self.numRefFrames, name: "numRefFrames", parent: name, max: 6)
            try self.validate(self.numRefFrames, name: "numRefFrames", parent: name, min: 1)
            try self.validate(self.parDenominator, name: "parDenominator", parent: name, min: 1)
            try self.validate(self.parNumerator, name: "parNumerator", parent: name, min: 1)
            try self.validate(self.qvbrQualityLevel, name: "qvbrQualityLevel", parent: name, max: 10)
            try self.validate(self.qvbrQualityLevel, name: "qvbrQualityLevel", parent: name, min: 1)
            try self.validate(self.slices, name: "slices", parent: name, max: 32)
            try self.validate(self.slices, name: "slices", parent: name, min: 1)
            try self.validate(self.softness, name: "softness", parent: name, max: 128)
            try self.validate(self.softness, name: "softness", parent: name, min: 0)
            try self.timecodeBurninSettings?.validate(name: "\(name).timecodeBurninSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case adaptiveQuantization = "adaptiveQuantization"
            case afdSignaling = "afdSignaling"
            case bitrate = "bitrate"
            case bufFillPct = "bufFillPct"
            case bufSize = "bufSize"
            case colorMetadata = "colorMetadata"
            case colorSpaceSettings = "colorSpaceSettings"
            case entropyEncoding = "entropyEncoding"
            case filterSettings = "filterSettings"
            case fixedAfd = "fixedAfd"
            case flickerAq = "flickerAq"
            case forceFieldPictures = "forceFieldPictures"
            case framerateControl = "framerateControl"
            case framerateDenominator = "framerateDenominator"
            case framerateNumerator = "framerateNumerator"
            case gopBReference = "gopBReference"
            case gopClosedCadence = "gopClosedCadence"
            case gopNumBFrames = "gopNumBFrames"
            case gopSize = "gopSize"
            case gopSizeUnits = "gopSizeUnits"
            case level = "level"
            case lookAheadRateControl = "lookAheadRateControl"
            case maxBitrate = "maxBitrate"
            case minBitrate = "minBitrate"
            case minIInterval = "minIInterval"
            case minQp = "minQp"
            case numRefFrames = "numRefFrames"
            case parControl = "parControl"
            case parDenominator = "parDenominator"
            case parNumerator = "parNumerator"
            case profile = "profile"
            case qualityLevel = "qualityLevel"
            case qvbrQualityLevel = "qvbrQualityLevel"
            case rateControlMode = "rateControlMode"
            case scanType = "scanType"
            case sceneChangeDetect = "sceneChangeDetect"
            case slices = "slices"
            case softness = "softness"
            case spatialAq = "spatialAq"
            case subgopLength = "subgopLength"
            case syntax = "syntax"
            case temporalAq = "temporalAq"
            case timecodeBurninSettings = "timecodeBurninSettings"
            case timecodeInsertion = "timecodeInsertion"
        }
    }

    public struct H265ColorSpaceSettings: AWSEncodableShape & AWSDecodableShape {
        public let colorSpacePassthroughSettings: ColorSpacePassthroughSettings?
        public let dolbyVision81Settings: DolbyVision81Settings?
        public let hdr10Settings: Hdr10Settings?
        public let rec601Settings: Rec601Settings?
        public let rec709Settings: Rec709Settings?

        @inlinable
        public init(colorSpacePassthroughSettings: ColorSpacePassthroughSettings? = nil, dolbyVision81Settings: DolbyVision81Settings? = nil, hdr10Settings: Hdr10Settings? = nil, rec601Settings: Rec601Settings? = nil, rec709Settings: Rec709Settings? = nil) {
            self.colorSpacePassthroughSettings = colorSpacePassthroughSettings
            self.dolbyVision81Settings = dolbyVision81Settings
            self.hdr10Settings = hdr10Settings
            self.rec601Settings = rec601Settings
            self.rec709Settings = rec709Settings
        }

        public func validate(name: String) throws {
            try self.hdr10Settings?.validate(name: "\(name).hdr10Settings")
        }

        private enum CodingKeys: String, CodingKey {
            case colorSpacePassthroughSettings = "colorSpacePassthroughSettings"
            case dolbyVision81Settings = "dolbyVision81Settings"
            case hdr10Settings = "hdr10Settings"
            case rec601Settings = "rec601Settings"
            case rec709Settings = "rec709Settings"
        }
    }

    public struct H265FilterSettings: AWSEncodableShape & AWSDecodableShape {
        public let bandwidthReductionFilterSettings: BandwidthReductionFilterSettings?
        public let temporalFilterSettings: TemporalFilterSettings?

        @inlinable
        public init(bandwidthReductionFilterSettings: BandwidthReductionFilterSettings? = nil, temporalFilterSettings: TemporalFilterSettings? = nil) {
            self.bandwidthReductionFilterSettings = bandwidthReductionFilterSettings
            self.temporalFilterSettings = temporalFilterSettings
        }

        private enum CodingKeys: String, CodingKey {
            case bandwidthReductionFilterSettings = "bandwidthReductionFilterSettings"
            case temporalFilterSettings = "temporalFilterSettings"
        }
    }

    public struct H265Settings: AWSEncodableShape & AWSDecodableShape {
        /// Enables or disables adaptive quantization (AQ), which is a technique MediaLive can apply to video on a frame-by-frame basis to produce more compression without losing quality. There are three types of adaptive quantization: spatial, temporal, and flicker. Flicker is the only type that you can customize. We recommend that you set the field to Auto. For more information about all the options, see the topic about video adaptive quantization in the MediaLive user guide.
        public let adaptiveQuantization: H265AdaptiveQuantization?
        /// Indicates that AFD values will be written into the output stream.  If afdSignaling is "auto", the system will try to preserve the input AFD value (in cases where multiple AFD values are valid). If set to "fixed", the AFD value will be the value configured in the fixedAfd parameter.
        public let afdSignaling: AfdSignaling?
        /// Whether or not EML should insert an Alternative Transfer Function SEI message to support backwards compatibility with non-HDR decoders and displays.
        public let alternativeTransferFunction: H265AlternativeTransferFunction?
        /// Average bitrate in bits/second. Required when the rate control mode is VBR or CBR. Not used for QVBR. In an MS Smooth output group, each output must have a unique value when its bitrate is rounded down to the nearest multiple of 1000.
        public let bitrate: Int?
        /// Size of buffer (HRD buffer model) in bits.
        public let bufSize: Int?
        /// Includes colorspace metadata in the output.
        public let colorMetadata: H265ColorMetadata?
        /// Specify the type of color space to apply or choose to pass through. The default is to pass through the color space that is in the source.
        public let colorSpaceSettings: H265ColorSpaceSettings?
        /// Enable or disable the deblocking filter for this codec. The filter reduces blocking artifacts at block boundaries,
        /// which improves overall video quality. If the filter is disabled, visible block edges might appear in the output,
        /// especially at lower bitrates.
        public let deblocking: H265Deblocking?
        /// Optional. Both filters reduce bandwidth by removing imperceptible details. You can enable one of the filters. We
        /// recommend that you try both filters and observe the results to decide which one to use.
        /// The Temporal Filter reduces bandwidth by removing imperceptible details in the content. It combines perceptual
        /// filtering and motion compensated temporal filtering (MCTF). It operates independently of the compression level.
        /// The Bandwidth Reduction filter is a perceptual filter located within the encoding loop. It adapts to the current
        /// compression level to filter imperceptible signals. This filter works only when the resolution is 1080p or lower.
        public let filterSettings: H265FilterSettings?
        /// Four bit AFD value to write on all frames of video in the output stream. Only valid when afdSignaling is set to 'Fixed'.
        public let fixedAfd: FixedAfd?
        /// Flicker AQ makes adjustments within each frame to reduce flicker or 'pop' on I-frames. The value to enter in this field depends on the value in the Adaptive quantization field. For more information, see the topic about video adaptive quantization in the MediaLive user guide.
        public let flickerAq: H265FlickerAq?
        /// Framerate denominator.
        public let framerateDenominator: Int?
        /// Framerate numerator - framerate is a fraction, e.g. 24000 / 1001 = 23.976 fps.
        public let framerateNumerator: Int?
        /// Allows the encoder to use a B-Frame as a reference frame as well.
        /// ENABLED: B-frames will also serve as reference frames.
        /// DISABLED: B-frames won't be reference frames.
        /// Must be DISABLED if resolution is greater than 1080p or when using tiled hevc encoding.
        public let gopBReference: H265GopBReference?
        /// Frequency of closed GOPs. In streaming applications, it is recommended that this be set to 1 so a decoder joining mid-stream will receive an IDR frame as quickly as possible. Setting this value to 0 will break output segmenting.
        public let gopClosedCadence: Int?
        /// Sets the number of B-frames between reference frames.
        /// Set to 2 if resolution is greater than 1080p or when using tiled hevc encoding.
        public let gopNumBFrames: Int?
        /// GOP size (keyframe interval) in units of either frames or seconds per gopSizeUnits.
        /// If gopSizeUnits is frames, gopSize must be an integer and must be greater than or equal to 1.
        /// If gopSizeUnits is seconds, gopSize must be greater than 0, but need not be an integer.
        public let gopSize: Double?
        /// Indicates if the gopSize is specified in frames or seconds. If seconds the system will convert the gopSize into a frame count at run time.
        public let gopSizeUnits: H265GopSizeUnits?
        /// H.265 Level.
        public let level: H265Level?
        /// Amount of lookahead. A value of low can decrease latency and memory usage, while high can produce better quality for certain content.
        public let lookAheadRateControl: H265LookAheadRateControl?
        /// For QVBR: See the tooltip for Quality level
        public let maxBitrate: Int?
        /// Used for QVBR rate control mode only.
        /// Optional.
        /// Enter a minimum bitrate if you want to keep the output bitrate about a threshold, in order to prevent the downstream system from de-allocating network bandwidth for this output.
        public let minBitrate: Int?
        /// Only meaningful if sceneChangeDetect is set to enabled.  Defaults to 5 if multiplex rate control is used.  Enforces separation between repeated (cadence) I-frames and I-frames inserted by Scene Change Detection. If a scene change I-frame is within I-interval frames of a cadence I-frame, the GOP is shrunk and/or stretched to the scene change I-frame. GOP stretch requires enabling lookahead as well as setting I-interval. The normal cadence resumes for the next GOP. Note: Maximum GOP stretch = GOP size + Min-I-interval - 1
        public let minIInterval: Int?
        /// Sets the minimum QP. If you aren't familiar with quantization adjustment, leave the field empty. MediaLive will
        /// apply an appropriate value.
        public let minQp: Int?
        /// If you are setting up the picture as a tile, you must set this to "disabled". In all other configurations, you typically enter "enabled".
        public let mvOverPictureBoundaries: H265MvOverPictureBoundaries?
        /// If you are setting up the picture as a tile, you must set this to "disabled". In other configurations, you typically enter "enabled".
        public let mvTemporalPredictor: H265MvTemporalPredictor?
        /// Pixel Aspect Ratio denominator.
        public let parDenominator: Int?
        /// Pixel Aspect Ratio numerator.
        public let parNumerator: Int?
        /// H.265 Profile.
        public let profile: H265Profile?
        /// Controls the target quality for the video encode. Applies only when the rate control mode is QVBR. Set values for the QVBR quality level field and Max bitrate field that suit your most important viewing devices. Recommended values are:
        /// - Primary screen: Quality level: 8 to 10. Max bitrate: 4M
        /// - PC or tablet: Quality level: 7. Max bitrate: 1.5M to 3M
        /// - Smartphone: Quality level: 6. Max bitrate: 1M to 1.5M
        public let qvbrQualityLevel: Int?
        /// Rate control mode.
        /// QVBR: Quality will match the specified quality level except when it is constrained by the
        /// maximum bitrate.  Recommended if you or your viewers pay for bandwidth.
        /// CBR: Quality varies, depending on the video complexity. Recommended only if you distribute
        /// your assets to devices that cannot handle variable bitrates.
        /// Multiplex: This rate control mode is only supported (and is required) when the video is being
        /// delivered to a MediaLive Multiplex in which case the rate control configuration is controlled
        /// by the properties within the Multiplex Program.
        public let rateControlMode: H265RateControlMode?
        /// Sets the scan type of the output to progressive or top-field-first interlaced.
        public let scanType: H265ScanType?
        /// Scene change detection.
        public let sceneChangeDetect: H265SceneChangeDetect?
        /// Number of slices per picture. Must be less than or equal to the number of macroblock rows for progressive pictures, and less than or equal to half the number of macroblock rows for interlaced pictures.
        /// This field is optional; when no value is specified the encoder will choose the number of slices based on encode resolution.
        public let slices: Int?
        /// Sets the number of B-frames in each sub-GOP.
        /// FIXED: Use the value in Num B-frames.
        /// DYNAMIC: Optimizes the number of B-frames in each sub-GOP to improve visual quality.
        /// Must be FIXED if resolution is greater than 1080p or when using tiled hevc encoding.
        public let subgopLength: H265SubGopLength?
        /// H.265 Tier.
        public let tier: H265Tier?
        /// Set this field to set up the picture as a tile. You must also set tileWidth.
        /// The tile height must result in 22 or fewer rows in the frame. The tile width
        /// must result in 20 or fewer columns in the frame. And finally, the product of the
        /// column count and row count must be 64 of less.
        /// If the tile width and height are specified, MediaLive will override the video
        /// codec slices field with a value that MediaLive calculates
        public let tileHeight: Int?
        /// Set to "padded" to force MediaLive to add padding to the frame, to obtain a frame that is a whole multiple of the tile size.
        /// If you are setting up the picture as a tile, you must enter "padded".
        /// In all other configurations, you typically enter "none".
        public let tilePadding: H265TilePadding?
        /// Set this field to set up the picture as a tile. See tileHeight for more information.
        public let tileWidth: Int?
        /// Timecode burn-in settings
        public let timecodeBurninSettings: TimecodeBurninSettings?
        /// Determines how timecodes should be inserted into the video elementary stream.
        /// - 'disabled': Do not include timecodes
        /// - 'picTimingSei': Pass through picture timing SEI messages from the source specified in Timecode Config
        public let timecodeInsertion: H265TimecodeInsertionBehavior?
        /// Select the tree block size used for encoding. If you enter "auto", the encoder will pick the best size. If you are setting up the picture as a tile, you must set this to 32x32. In all other configurations, you typically enter "auto".
        public let treeblockSize: H265TreeblockSize?

        @inlinable
        public init(adaptiveQuantization: H265AdaptiveQuantization? = nil, afdSignaling: AfdSignaling? = nil, alternativeTransferFunction: H265AlternativeTransferFunction? = nil, bitrate: Int? = nil, bufSize: Int? = nil, colorMetadata: H265ColorMetadata? = nil, colorSpaceSettings: H265ColorSpaceSettings? = nil, deblocking: H265Deblocking? = nil, filterSettings: H265FilterSettings? = nil, fixedAfd: FixedAfd? = nil, flickerAq: H265FlickerAq? = nil, framerateDenominator: Int? = nil, framerateNumerator: Int? = nil, gopBReference: H265GopBReference? = nil, gopClosedCadence: Int? = nil, gopNumBFrames: Int? = nil, gopSize: Double? = nil, gopSizeUnits: H265GopSizeUnits? = nil, level: H265Level? = nil, lookAheadRateControl: H265LookAheadRateControl? = nil, maxBitrate: Int? = nil, minBitrate: Int? = nil, minIInterval: Int? = nil, minQp: Int? = nil, mvOverPictureBoundaries: H265MvOverPictureBoundaries? = nil, mvTemporalPredictor: H265MvTemporalPredictor? = nil, parDenominator: Int? = nil, parNumerator: Int? = nil, profile: H265Profile? = nil, qvbrQualityLevel: Int? = nil, rateControlMode: H265RateControlMode? = nil, scanType: H265ScanType? = nil, sceneChangeDetect: H265SceneChangeDetect? = nil, slices: Int? = nil, subgopLength: H265SubGopLength? = nil, tier: H265Tier? = nil, tileHeight: Int? = nil, tilePadding: H265TilePadding? = nil, tileWidth: Int? = nil, timecodeBurninSettings: TimecodeBurninSettings? = nil, timecodeInsertion: H265TimecodeInsertionBehavior? = nil, treeblockSize: H265TreeblockSize? = nil) {
            self.adaptiveQuantization = adaptiveQuantization
            self.afdSignaling = afdSignaling
            self.alternativeTransferFunction = alternativeTransferFunction
            self.bitrate = bitrate
            self.bufSize = bufSize
            self.colorMetadata = colorMetadata
            self.colorSpaceSettings = colorSpaceSettings
            self.deblocking = deblocking
            self.filterSettings = filterSettings
            self.fixedAfd = fixedAfd
            self.flickerAq = flickerAq
            self.framerateDenominator = framerateDenominator
            self.framerateNumerator = framerateNumerator
            self.gopBReference = gopBReference
            self.gopClosedCadence = gopClosedCadence
            self.gopNumBFrames = gopNumBFrames
            self.gopSize = gopSize
            self.gopSizeUnits = gopSizeUnits
            self.level = level
            self.lookAheadRateControl = lookAheadRateControl
            self.maxBitrate = maxBitrate
            self.minBitrate = minBitrate
            self.minIInterval = minIInterval
            self.minQp = minQp
            self.mvOverPictureBoundaries = mvOverPictureBoundaries
            self.mvTemporalPredictor = mvTemporalPredictor
            self.parDenominator = parDenominator
            self.parNumerator = parNumerator
            self.profile = profile
            self.qvbrQualityLevel = qvbrQualityLevel
            self.rateControlMode = rateControlMode
            self.scanType = scanType
            self.sceneChangeDetect = sceneChangeDetect
            self.slices = slices
            self.subgopLength = subgopLength
            self.tier = tier
            self.tileHeight = tileHeight
            self.tilePadding = tilePadding
            self.tileWidth = tileWidth
            self.timecodeBurninSettings = timecodeBurninSettings
            self.timecodeInsertion = timecodeInsertion
            self.treeblockSize = treeblockSize
        }

        public func validate(name: String) throws {
            try self.validate(self.bitrate, name: "bitrate", parent: name, max: 40000000)
            try self.validate(self.bitrate, name: "bitrate", parent: name, min: 100000)
            try self.validate(self.bufSize, name: "bufSize", parent: name, max: 80000000)
            try self.validate(self.bufSize, name: "bufSize", parent: name, min: 100000)
            try self.colorSpaceSettings?.validate(name: "\(name).colorSpaceSettings")
            try self.validate(self.framerateDenominator, name: "framerateDenominator", parent: name, max: 3003)
            try self.validate(self.framerateDenominator, name: "framerateDenominator", parent: name, min: 1)
            try self.validate(self.framerateNumerator, name: "framerateNumerator", parent: name, min: 1)
            try self.validate(self.gopClosedCadence, name: "gopClosedCadence", parent: name, min: 0)
            try self.validate(self.gopNumBFrames, name: "gopNumBFrames", parent: name, max: 3)
            try self.validate(self.gopNumBFrames, name: "gopNumBFrames", parent: name, min: 0)
            try self.validate(self.maxBitrate, name: "maxBitrate", parent: name, max: 40000000)
            try self.validate(self.maxBitrate, name: "maxBitrate", parent: name, min: 100000)
            try self.validate(self.minBitrate, name: "minBitrate", parent: name, max: 40000000)
            try self.validate(self.minBitrate, name: "minBitrate", parent: name, min: 0)
            try self.validate(self.minIInterval, name: "minIInterval", parent: name, max: 30)
            try self.validate(self.minIInterval, name: "minIInterval", parent: name, min: 0)
            try self.validate(self.minQp, name: "minQp", parent: name, max: 51)
            try self.validate(self.minQp, name: "minQp", parent: name, min: 1)
            try self.validate(self.parDenominator, name: "parDenominator", parent: name, min: 1)
            try self.validate(self.parNumerator, name: "parNumerator", parent: name, min: 1)
            try self.validate(self.qvbrQualityLevel, name: "qvbrQualityLevel", parent: name, max: 10)
            try self.validate(self.qvbrQualityLevel, name: "qvbrQualityLevel", parent: name, min: 1)
            try self.validate(self.slices, name: "slices", parent: name, max: 16)
            try self.validate(self.slices, name: "slices", parent: name, min: 1)
            try self.validate(self.tileHeight, name: "tileHeight", parent: name, max: 2160)
            try self.validate(self.tileHeight, name: "tileHeight", parent: name, min: 64)
            try self.validate(self.tileWidth, name: "tileWidth", parent: name, max: 3840)
            try self.validate(self.tileWidth, name: "tileWidth", parent: name, min: 256)
            try self.timecodeBurninSettings?.validate(name: "\(name).timecodeBurninSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case adaptiveQuantization = "adaptiveQuantization"
            case afdSignaling = "afdSignaling"
            case alternativeTransferFunction = "alternativeTransferFunction"
            case bitrate = "bitrate"
            case bufSize = "bufSize"
            case colorMetadata = "colorMetadata"
            case colorSpaceSettings = "colorSpaceSettings"
            case deblocking = "deblocking"
            case filterSettings = "filterSettings"
            case fixedAfd = "fixedAfd"
            case flickerAq = "flickerAq"
            case framerateDenominator = "framerateDenominator"
            case framerateNumerator = "framerateNumerator"
            case gopBReference = "gopBReference"
            case gopClosedCadence = "gopClosedCadence"
            case gopNumBFrames = "gopNumBFrames"
            case gopSize = "gopSize"
            case gopSizeUnits = "gopSizeUnits"
            case level = "level"
            case lookAheadRateControl = "lookAheadRateControl"
            case maxBitrate = "maxBitrate"
            case minBitrate = "minBitrate"
            case minIInterval = "minIInterval"
            case minQp = "minQp"
            case mvOverPictureBoundaries = "mvOverPictureBoundaries"
            case mvTemporalPredictor = "mvTemporalPredictor"
            case parDenominator = "parDenominator"
            case parNumerator = "parNumerator"
            case profile = "profile"
            case qvbrQualityLevel = "qvbrQualityLevel"
            case rateControlMode = "rateControlMode"
            case scanType = "scanType"
            case sceneChangeDetect = "sceneChangeDetect"
            case slices = "slices"
            case subgopLength = "subgopLength"
            case tier = "tier"
            case tileHeight = "tileHeight"
            case tilePadding = "tilePadding"
            case tileWidth = "tileWidth"
            case timecodeBurninSettings = "timecodeBurninSettings"
            case timecodeInsertion = "timecodeInsertion"
            case treeblockSize = "treeblockSize"
        }
    }

    public struct Hdr10Settings: AWSEncodableShape & AWSDecodableShape {
        /// Maximum Content Light Level
        /// An integer metadata value defining the maximum light level, in nits,
        /// of any single pixel within an encoded HDR video stream or file.
        public let maxCll: Int?
        /// Maximum Frame Average Light Level
        /// An integer metadata value defining the maximum average light level, in nits,
        /// for any single frame within an encoded HDR video stream or file.
        public let maxFall: Int?

        @inlinable
        public init(maxCll: Int? = nil, maxFall: Int? = nil) {
            self.maxCll = maxCll
            self.maxFall = maxFall
        }

        public func validate(name: String) throws {
            try self.validate(self.maxCll, name: "maxCll", parent: name, max: 32768)
            try self.validate(self.maxCll, name: "maxCll", parent: name, min: 0)
            try self.validate(self.maxFall, name: "maxFall", parent: name, max: 32768)
            try self.validate(self.maxFall, name: "maxFall", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case maxCll = "maxCll"
            case maxFall = "maxFall"
        }
    }

    public struct HlsAkamaiSettings: AWSEncodableShape & AWSDecodableShape {
        /// Number of seconds to wait before retrying connection to the CDN if the connection is lost.
        public let connectionRetryInterval: Int?
        /// Size in seconds of file cache for streaming outputs.
        public let filecacheDuration: Int?
        /// Specify whether or not to use chunked transfer encoding to Akamai. User should contact Akamai to enable this feature.
        public let httpTransferMode: HlsAkamaiHttpTransferMode?
        /// Number of retry attempts that will be made before the Live Event is put into an error state. Applies only if the CDN destination URI begins with "s3" or "mediastore". For other URIs, the value is always 3.
        public let numRetries: Int?
        /// If a streaming output fails, number of seconds to wait until a restart is initiated. A value of 0 means never restart.
        public let restartDelay: Int?
        /// Salt for authenticated Akamai.
        public let salt: String?
        /// Token parameter for authenticated akamai. If not specified, _gda_ is used.
        public let token: String?

        @inlinable
        public init(connectionRetryInterval: Int? = nil, filecacheDuration: Int? = nil, httpTransferMode: HlsAkamaiHttpTransferMode? = nil, numRetries: Int? = nil, restartDelay: Int? = nil, salt: String? = nil, token: String? = nil) {
            self.connectionRetryInterval = connectionRetryInterval
            self.filecacheDuration = filecacheDuration
            self.httpTransferMode = httpTransferMode
            self.numRetries = numRetries
            self.restartDelay = restartDelay
            self.salt = salt
            self.token = token
        }

        public func validate(name: String) throws {
            try self.validate(self.connectionRetryInterval, name: "connectionRetryInterval", parent: name, min: 0)
            try self.validate(self.filecacheDuration, name: "filecacheDuration", parent: name, max: 600)
            try self.validate(self.filecacheDuration, name: "filecacheDuration", parent: name, min: 0)
            try self.validate(self.numRetries, name: "numRetries", parent: name, min: 0)
            try self.validate(self.restartDelay, name: "restartDelay", parent: name, max: 15)
            try self.validate(self.restartDelay, name: "restartDelay", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case connectionRetryInterval = "connectionRetryInterval"
            case filecacheDuration = "filecacheDuration"
            case httpTransferMode = "httpTransferMode"
            case numRetries = "numRetries"
            case restartDelay = "restartDelay"
            case salt = "salt"
            case token = "token"
        }
    }

    public struct HlsBasicPutSettings: AWSEncodableShape & AWSDecodableShape {
        /// Number of seconds to wait before retrying connection to the CDN if the connection is lost.
        public let connectionRetryInterval: Int?
        /// Size in seconds of file cache for streaming outputs.
        public let filecacheDuration: Int?
        /// Number of retry attempts that will be made before the Live Event is put into an error state. Applies only if the CDN destination URI begins with "s3" or "mediastore". For other URIs, the value is always 3.
        public let numRetries: Int?
        /// If a streaming output fails, number of seconds to wait until a restart is initiated. A value of 0 means never restart.
        public let restartDelay: Int?

        @inlinable
        public init(connectionRetryInterval: Int? = nil, filecacheDuration: Int? = nil, numRetries: Int? = nil, restartDelay: Int? = nil) {
            self.connectionRetryInterval = connectionRetryInterval
            self.filecacheDuration = filecacheDuration
            self.numRetries = numRetries
            self.restartDelay = restartDelay
        }

        public func validate(name: String) throws {
            try self.validate(self.connectionRetryInterval, name: "connectionRetryInterval", parent: name, min: 0)
            try self.validate(self.filecacheDuration, name: "filecacheDuration", parent: name, max: 600)
            try self.validate(self.filecacheDuration, name: "filecacheDuration", parent: name, min: 0)
            try self.validate(self.numRetries, name: "numRetries", parent: name, min: 0)
            try self.validate(self.restartDelay, name: "restartDelay", parent: name, max: 15)
            try self.validate(self.restartDelay, name: "restartDelay", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case connectionRetryInterval = "connectionRetryInterval"
            case filecacheDuration = "filecacheDuration"
            case numRetries = "numRetries"
            case restartDelay = "restartDelay"
        }
    }

    public struct HlsCdnSettings: AWSEncodableShape & AWSDecodableShape {
        public let hlsAkamaiSettings: HlsAkamaiSettings?
        public let hlsBasicPutSettings: HlsBasicPutSettings?
        public let hlsMediaStoreSettings: HlsMediaStoreSettings?
        public let hlsS3Settings: HlsS3Settings?
        public let hlsWebdavSettings: HlsWebdavSettings?

        @inlinable
        public init(hlsAkamaiSettings: HlsAkamaiSettings? = nil, hlsBasicPutSettings: HlsBasicPutSettings? = nil, hlsMediaStoreSettings: HlsMediaStoreSettings? = nil, hlsS3Settings: HlsS3Settings? = nil, hlsWebdavSettings: HlsWebdavSettings? = nil) {
            self.hlsAkamaiSettings = hlsAkamaiSettings
            self.hlsBasicPutSettings = hlsBasicPutSettings
            self.hlsMediaStoreSettings = hlsMediaStoreSettings
            self.hlsS3Settings = hlsS3Settings
            self.hlsWebdavSettings = hlsWebdavSettings
        }

        public func validate(name: String) throws {
            try self.hlsAkamaiSettings?.validate(name: "\(name).hlsAkamaiSettings")
            try self.hlsBasicPutSettings?.validate(name: "\(name).hlsBasicPutSettings")
            try self.hlsMediaStoreSettings?.validate(name: "\(name).hlsMediaStoreSettings")
            try self.hlsWebdavSettings?.validate(name: "\(name).hlsWebdavSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case hlsAkamaiSettings = "hlsAkamaiSettings"
            case hlsBasicPutSettings = "hlsBasicPutSettings"
            case hlsMediaStoreSettings = "hlsMediaStoreSettings"
            case hlsS3Settings = "hlsS3Settings"
            case hlsWebdavSettings = "hlsWebdavSettings"
        }
    }

    public struct HlsGroupSettings: AWSEncodableShape & AWSDecodableShape {
        /// Choose one or more ad marker types to pass SCTE35 signals through to this group of Apple HLS outputs.
        public let adMarkers: [HlsAdMarkers]?
        /// A partial URI prefix that will be prepended to each output in the media .m3u8 file. Can be used if base manifest is delivered from a different URL than the main .m3u8 file.
        public let baseUrlContent: String?
        /// Optional. One value per output group.
        /// This field is required only if you are completing Base URL content A, and the downstream system has notified you that the media files for pipeline 1 of all outputs are in a location different from the media files for pipeline 0.
        public let baseUrlContent1: String?
        /// A partial URI prefix that will be prepended to each output in the media .m3u8 file. Can be used if base manifest is delivered from a different URL than the main .m3u8 file.
        public let baseUrlManifest: String?
        /// Optional. One value per output group.
        /// Complete this field only if you are completing Base URL manifest A, and the downstream system has notified you that the child manifest files for pipeline 1 of all outputs are in a location different from the child manifest files for pipeline 0.
        public let baseUrlManifest1: String?
        /// Mapping of up to 4 caption channels to caption languages.  Is only meaningful if captionLanguageSetting is set to "insert".
        public let captionLanguageMappings: [CaptionLanguageMapping]?
        /// Applies only to 608 Embedded output captions.
        /// insert: Include CLOSED-CAPTIONS lines in the manifest. Specify at least one language in the CC1 Language Code field. One CLOSED-CAPTION line is added for each Language Code you specify. Make sure to specify the languages in the order in which they appear in the original source (if the source is embedded format) or the order of the caption selectors (if the source is other than embedded). Otherwise, languages in the manifest will not match up properly with the output captions.
        /// none: Include CLOSED-CAPTIONS=NONE line in the manifest.
        /// omit: Omit any CLOSED-CAPTIONS line from the manifest.
        public let captionLanguageSetting: HlsCaptionLanguageSetting?
        /// When set to "disabled", sets the #EXT-X-ALLOW-CACHE:no tag in the manifest, which prevents clients from saving media segments for later replay.
        public let clientCache: HlsClientCache?
        /// Specification to use (RFC-6381 or the default RFC-4281) during m3u8 playlist generation.
        public let codecSpecification: HlsCodecSpecification?
        /// For use with encryptionType. This is a 128-bit, 16-byte hex value represented by a 32-character text string. If ivSource is set to "explicit" then this parameter is required and is used as the IV for encryption.
        public let constantIv: String?
        /// A directory or HTTP destination for the HLS segments, manifest files, and encryption keys (if enabled).
        public let destination: OutputLocationRef?
        /// Place segments in subdirectories.
        public let directoryStructure: HlsDirectoryStructure?
        /// Specifies whether to insert EXT-X-DISCONTINUITY tags in the HLS child manifests for this output group.
        /// Typically, choose Insert because these tags are required in the manifest (according to the HLS specification) and serve an important purpose.
        /// Choose Never Insert only if the downstream system is doing real-time failover (without using the MediaLive automatic failover feature) and only if that downstream system has advised you to exclude the tags.
        public let discontinuityTags: HlsDiscontinuityTags?
        /// Encrypts the segments with the given encryption scheme.  Exclude this parameter if no encryption is desired.
        public let encryptionType: HlsEncryptionType?
        /// Parameters that control interactions with the CDN.
        public let hlsCdnSettings: HlsCdnSettings?
        /// State of HLS ID3 Segment Tagging
        public let hlsId3SegmentTagging: HlsId3SegmentTaggingState?
        /// DISABLED: Do not create an I-frame-only manifest, but do create the master and media manifests (according to the Output Selection field).
        /// STANDARD: Create an I-frame-only manifest for each output that contains video, as well as the other manifests (according to the Output Selection field). The I-frame manifest contains a #EXT-X-I-FRAMES-ONLY tag to indicate it is I-frame only, and one or more #EXT-X-BYTERANGE entries identifying the I-frame position. For example, #EXT-X-BYTERANGE:160364@1461888"
        public let iFrameOnlyPlaylists: IFrameOnlyPlaylistType?
        /// Specifies whether to include the final (incomplete) segment in the media output when the pipeline stops producing output because of a channel stop, a channel pause or a loss of input to the pipeline.
        /// Auto means that MediaLive decides whether to include the final segment, depending on the channel class and the types of output groups.
        /// Suppress means to never include the incomplete segment. We recommend you choose Auto and let MediaLive control the behavior.
        public let incompleteSegmentBehavior: HlsIncompleteSegmentBehavior?
        /// Applies only if Mode field is LIVE.
        /// Specifies the maximum number of segments in the media manifest file. After this maximum, older segments are removed from the media manifest. This number must be smaller than the number in the Keep Segments field.
        public let indexNSegments: Int?
        /// Parameter that control output group behavior on input loss.
        public let inputLossAction: InputLossActionForHlsOut?
        /// For use with encryptionType. The IV (Initialization Vector) is a 128-bit number used in conjunction with the key for encrypting blocks. If set to "include", IV is listed in the manifest, otherwise the IV is not in the manifest.
        public let ivInManifest: HlsIvInManifest?
        /// For use with encryptionType. The IV (Initialization Vector) is a 128-bit number used in conjunction with the key for encrypting blocks. If this setting is "followsSegmentNumber", it will cause the IV to change every segment (to match the segment number). If this is set to "explicit", you must enter a constantIv value.
        public let ivSource: HlsIvSource?
        /// Applies only if Mode field is LIVE.
        /// Specifies the number of media segments to retain in the destination directory. This number should be bigger than indexNSegments (Num segments). We recommend (value = (2 x indexNsegments) + 1).
        /// If this "keep segments" number is too low, the following might happen: the player is still reading a media manifest file that lists this segment, but that segment has been removed from the destination directory (as directed by indexNSegments). This situation would result in a 404 HTTP error on the player.
        public let keepSegments: Int?
        /// The value specifies how the key is represented in the resource identified by the URI.  If parameter is absent, an implicit value of "identity" is used.  A reverse DNS string can also be given.
        public let keyFormat: String?
        /// Either a single positive integer version value or a slash delimited list of version values (1/2/3).
        public let keyFormatVersions: String?
        /// The key provider settings.
        public let keyProviderSettings: KeyProviderSettings?
        /// When set to gzip, compresses HLS playlist.
        public let manifestCompression: HlsManifestCompression?
        /// Indicates whether the output manifest should use floating point or integer values for segment duration.
        public let manifestDurationFormat: HlsManifestDurationFormat?
        /// Minimum length of MPEG-2 Transport Stream segments in seconds. When set, minimum segment length is enforced by looking ahead and back within the specified range for a nearby avail and extending the segment size if needed.
        public let minSegmentLength: Int?
        /// If "vod", all segments are indexed and kept permanently in the destination and manifest. If "live", only the number segments specified in keepSegments and indexNSegments are kept; newer segments replace older segments, which may prevent players from rewinding all the way to the beginning of the event.
        /// VOD mode uses HLS EXT-X-PLAYLIST-TYPE of EVENT while the channel is running, converting it to a "VOD" type manifest on completion of the stream.
        public let mode: HlsMode?
        /// MANIFESTS_AND_SEGMENTS: Generates manifests (master manifest, if applicable, and media manifests) for this output group.
        /// VARIANT_MANIFESTS_AND_SEGMENTS: Generates media manifests for this output group, but not a master manifest.
        /// SEGMENTS_ONLY: Does not generate any manifests for this output group.
        public let outputSelection: HlsOutputSelection?
        /// Includes or excludes EXT-X-PROGRAM-DATE-TIME tag in .m3u8 manifest files. The value is calculated using the program date time clock.
        public let programDateTime: HlsProgramDateTime?
        /// Specifies the algorithm used to drive the HLS EXT-X-PROGRAM-DATE-TIME clock. Options include:
        /// INITIALIZE_FROM_OUTPUT_TIMECODE: The PDT clock is initialized as a function of the first output timecode, then incremented by the EXTINF duration of each encoded segment.
        /// SYSTEM_CLOCK: The PDT clock is initialized as a function of the UTC wall clock, then incremented by the EXTINF duration of each encoded segment. If the PDT clock diverges from the wall clock by more than 500ms, it is resynchronized to the wall clock.
        public let programDateTimeClock: HlsProgramDateTimeClock?
        /// Period of insertion of EXT-X-PROGRAM-DATE-TIME entry, in seconds.
        public let programDateTimePeriod: Int?
        /// ENABLED: The master manifest (.m3u8 file) for each pipeline includes information about both pipelines: first its own media files, then the media files of the other pipeline. This feature allows playout device that support stale manifest detection to switch from one manifest to the other, when the current manifest seems to be stale. There are still two destinations and two master manifests, but both master manifests reference the media files from both pipelines.
        /// DISABLED: The master manifest (.m3u8 file) for each pipeline includes information about its own pipeline only.
        /// For an HLS output group with MediaPackage as the destination, the DISABLED behavior is always followed. MediaPackage regenerates the manifests it serves to players so a redundant manifest from MediaLive is irrelevant.
        public let redundantManifest: HlsRedundantManifest?
        /// useInputSegmentation has been deprecated. The configured segment size is always used.
        public let segmentationMode: HlsSegmentationMode?
        /// Length of MPEG-2 Transport Stream segments to create in seconds. Note that segments will end on the next keyframe after this duration, so actual segment length may be longer.
        public let segmentLength: Int?
        /// Number of segments to write to a subdirectory before starting a new one. directoryStructure must be subdirectoryPerStream for this setting to have an effect.
        public let segmentsPerSubdirectory: Int?
        /// Include or exclude RESOLUTION attribute for video in EXT-X-STREAM-INF tag of variant manifest.
        public let streamInfResolution: HlsStreamInfResolution?
        /// Indicates ID3 frame that has the timecode.
        public let timedMetadataId3Frame: HlsTimedMetadataId3Frame?
        /// Timed Metadata interval in seconds.
        public let timedMetadataId3Period: Int?
        /// Provides an extra millisecond delta offset to fine tune the timestamps.
        public let timestampDeltaMilliseconds: Int?
        /// SEGMENTED_FILES: Emit the program as segments - multiple .ts media files.
        /// SINGLE_FILE: Applies only if Mode field is VOD. Emit the program as a single .ts media file. The media manifest includes #EXT-X-BYTERANGE tags to index segments for playback. A typical use for this value is when sending the output to AWS Elemental MediaConvert, which can accept only a single media file. Playback while the channel is running is not guaranteed due to HTTP server caching.
        public let tsFileMode: HlsTsFileMode?

        @inlinable
        public init(adMarkers: [HlsAdMarkers]? = nil, baseUrlContent: String? = nil, baseUrlContent1: String? = nil, baseUrlManifest: String? = nil, baseUrlManifest1: String? = nil, captionLanguageMappings: [CaptionLanguageMapping]? = nil, captionLanguageSetting: HlsCaptionLanguageSetting? = nil, clientCache: HlsClientCache? = nil, codecSpecification: HlsCodecSpecification? = nil, constantIv: String? = nil, destination: OutputLocationRef? = nil, directoryStructure: HlsDirectoryStructure? = nil, discontinuityTags: HlsDiscontinuityTags? = nil, encryptionType: HlsEncryptionType? = nil, hlsCdnSettings: HlsCdnSettings? = nil, hlsId3SegmentTagging: HlsId3SegmentTaggingState? = nil, iFrameOnlyPlaylists: IFrameOnlyPlaylistType? = nil, incompleteSegmentBehavior: HlsIncompleteSegmentBehavior? = nil, indexNSegments: Int? = nil, inputLossAction: InputLossActionForHlsOut? = nil, ivInManifest: HlsIvInManifest? = nil, ivSource: HlsIvSource? = nil, keepSegments: Int? = nil, keyFormat: String? = nil, keyFormatVersions: String? = nil, keyProviderSettings: KeyProviderSettings? = nil, manifestCompression: HlsManifestCompression? = nil, manifestDurationFormat: HlsManifestDurationFormat? = nil, minSegmentLength: Int? = nil, mode: HlsMode? = nil, outputSelection: HlsOutputSelection? = nil, programDateTime: HlsProgramDateTime? = nil, programDateTimeClock: HlsProgramDateTimeClock? = nil, programDateTimePeriod: Int? = nil, redundantManifest: HlsRedundantManifest? = nil, segmentationMode: HlsSegmentationMode? = nil, segmentLength: Int? = nil, segmentsPerSubdirectory: Int? = nil, streamInfResolution: HlsStreamInfResolution? = nil, timedMetadataId3Frame: HlsTimedMetadataId3Frame? = nil, timedMetadataId3Period: Int? = nil, timestampDeltaMilliseconds: Int? = nil, tsFileMode: HlsTsFileMode? = nil) {
            self.adMarkers = adMarkers
            self.baseUrlContent = baseUrlContent
            self.baseUrlContent1 = baseUrlContent1
            self.baseUrlManifest = baseUrlManifest
            self.baseUrlManifest1 = baseUrlManifest1
            self.captionLanguageMappings = captionLanguageMappings
            self.captionLanguageSetting = captionLanguageSetting
            self.clientCache = clientCache
            self.codecSpecification = codecSpecification
            self.constantIv = constantIv
            self.destination = destination
            self.directoryStructure = directoryStructure
            self.discontinuityTags = discontinuityTags
            self.encryptionType = encryptionType
            self.hlsCdnSettings = hlsCdnSettings
            self.hlsId3SegmentTagging = hlsId3SegmentTagging
            self.iFrameOnlyPlaylists = iFrameOnlyPlaylists
            self.incompleteSegmentBehavior = incompleteSegmentBehavior
            self.indexNSegments = indexNSegments
            self.inputLossAction = inputLossAction
            self.ivInManifest = ivInManifest
            self.ivSource = ivSource
            self.keepSegments = keepSegments
            self.keyFormat = keyFormat
            self.keyFormatVersions = keyFormatVersions
            self.keyProviderSettings = keyProviderSettings
            self.manifestCompression = manifestCompression
            self.manifestDurationFormat = manifestDurationFormat
            self.minSegmentLength = minSegmentLength
            self.mode = mode
            self.outputSelection = outputSelection
            self.programDateTime = programDateTime
            self.programDateTimeClock = programDateTimeClock
            self.programDateTimePeriod = programDateTimePeriod
            self.redundantManifest = redundantManifest
            self.segmentationMode = segmentationMode
            self.segmentLength = segmentLength
            self.segmentsPerSubdirectory = segmentsPerSubdirectory
            self.streamInfResolution = streamInfResolution
            self.timedMetadataId3Frame = timedMetadataId3Frame
            self.timedMetadataId3Period = timedMetadataId3Period
            self.timestampDeltaMilliseconds = timestampDeltaMilliseconds
            self.tsFileMode = tsFileMode
        }

        public func validate(name: String) throws {
            try self.captionLanguageMappings?.forEach {
                try $0.validate(name: "\(name).captionLanguageMappings[]")
            }
            try self.validate(self.constantIv, name: "constantIv", parent: name, max: 32)
            try self.validate(self.constantIv, name: "constantIv", parent: name, min: 32)
            try self.hlsCdnSettings?.validate(name: "\(name).hlsCdnSettings")
            try self.validate(self.indexNSegments, name: "indexNSegments", parent: name, min: 3)
            try self.validate(self.keepSegments, name: "keepSegments", parent: name, min: 1)
            try self.keyProviderSettings?.validate(name: "\(name).keyProviderSettings")
            try self.validate(self.minSegmentLength, name: "minSegmentLength", parent: name, min: 0)
            try self.validate(self.programDateTimePeriod, name: "programDateTimePeriod", parent: name, max: 3600)
            try self.validate(self.programDateTimePeriod, name: "programDateTimePeriod", parent: name, min: 0)
            try self.validate(self.segmentLength, name: "segmentLength", parent: name, min: 1)
            try self.validate(self.segmentsPerSubdirectory, name: "segmentsPerSubdirectory", parent: name, min: 1)
            try self.validate(self.timedMetadataId3Period, name: "timedMetadataId3Period", parent: name, min: 0)
            try self.validate(self.timestampDeltaMilliseconds, name: "timestampDeltaMilliseconds", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case adMarkers = "adMarkers"
            case baseUrlContent = "baseUrlContent"
            case baseUrlContent1 = "baseUrlContent1"
            case baseUrlManifest = "baseUrlManifest"
            case baseUrlManifest1 = "baseUrlManifest1"
            case captionLanguageMappings = "captionLanguageMappings"
            case captionLanguageSetting = "captionLanguageSetting"
            case clientCache = "clientCache"
            case codecSpecification = "codecSpecification"
            case constantIv = "constantIv"
            case destination = "destination"
            case directoryStructure = "directoryStructure"
            case discontinuityTags = "discontinuityTags"
            case encryptionType = "encryptionType"
            case hlsCdnSettings = "hlsCdnSettings"
            case hlsId3SegmentTagging = "hlsId3SegmentTagging"
            case iFrameOnlyPlaylists = "iFrameOnlyPlaylists"
            case incompleteSegmentBehavior = "incompleteSegmentBehavior"
            case indexNSegments = "indexNSegments"
            case inputLossAction = "inputLossAction"
            case ivInManifest = "ivInManifest"
            case ivSource = "ivSource"
            case keepSegments = "keepSegments"
            case keyFormat = "keyFormat"
            case keyFormatVersions = "keyFormatVersions"
            case keyProviderSettings = "keyProviderSettings"
            case manifestCompression = "manifestCompression"
            case manifestDurationFormat = "manifestDurationFormat"
            case minSegmentLength = "minSegmentLength"
            case mode = "mode"
            case outputSelection = "outputSelection"
            case programDateTime = "programDateTime"
            case programDateTimeClock = "programDateTimeClock"
            case programDateTimePeriod = "programDateTimePeriod"
            case redundantManifest = "redundantManifest"
            case segmentationMode = "segmentationMode"
            case segmentLength = "segmentLength"
            case segmentsPerSubdirectory = "segmentsPerSubdirectory"
            case streamInfResolution = "streamInfResolution"
            case timedMetadataId3Frame = "timedMetadataId3Frame"
            case timedMetadataId3Period = "timedMetadataId3Period"
            case timestampDeltaMilliseconds = "timestampDeltaMilliseconds"
            case tsFileMode = "tsFileMode"
        }
    }

    public struct HlsId3SegmentTaggingScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        /// Complete this parameter if you want to specify the entire ID3 metadata. Enter a base64 string that contains one or more fully formed ID3 tags, according to the ID3 specification: http://id3.org/id3v2.4.0-structure
        public let id3: String?
        /// Complete this parameter if you want to specify only the metadata, not the entire frame. MediaLive will insert the metadata in a TXXX frame. Enter the value as plain text. You can include standard MediaLive variable data such as the current segment number.
        public let tag: String?

        @inlinable
        public init(id3: String? = nil, tag: String? = nil) {
            self.id3 = id3
            self.tag = tag
        }

        private enum CodingKeys: String, CodingKey {
            case id3 = "id3"
            case tag = "tag"
        }
    }

    public struct HlsInputSettings: AWSEncodableShape & AWSDecodableShape {
        /// When specified the HLS stream with the m3u8 BANDWIDTH that most closely matches this value will be chosen, otherwise the highest bandwidth stream in the m3u8 will be chosen.  The bitrate is specified in bits per second, as in an HLS manifest.
        public let bandwidth: Int?
        /// When specified, reading of the HLS input will begin this many buffer segments from the end (most recently written segment).  When not specified, the HLS input will begin with the first segment specified in the m3u8.
        public let bufferSegments: Int?
        /// The number of consecutive times that attempts to read a manifest or segment must fail before the input is considered unavailable.
        public let retries: Int?
        /// The number of seconds between retries when an attempt to read a manifest or segment fails.
        public let retryInterval: Int?
        /// Identifies the source for the SCTE-35 messages that MediaLive will ingest. Messages can be ingested from the content segments (in the stream) or from tags in the playlist (the HLS manifest). MediaLive ignores SCTE-35 information in the source that is not selected.
        public let scte35Source: HlsScte35SourceType?

        @inlinable
        public init(bandwidth: Int? = nil, bufferSegments: Int? = nil, retries: Int? = nil, retryInterval: Int? = nil, scte35Source: HlsScte35SourceType? = nil) {
            self.bandwidth = bandwidth
            self.bufferSegments = bufferSegments
            self.retries = retries
            self.retryInterval = retryInterval
            self.scte35Source = scte35Source
        }

        public func validate(name: String) throws {
            try self.validate(self.bandwidth, name: "bandwidth", parent: name, min: 0)
            try self.validate(self.bufferSegments, name: "bufferSegments", parent: name, min: 0)
            try self.validate(self.retries, name: "retries", parent: name, min: 0)
            try self.validate(self.retryInterval, name: "retryInterval", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case bandwidth = "bandwidth"
            case bufferSegments = "bufferSegments"
            case retries = "retries"
            case retryInterval = "retryInterval"
            case scte35Source = "scte35Source"
        }
    }

    public struct HlsMediaStoreSettings: AWSEncodableShape & AWSDecodableShape {
        /// Number of seconds to wait before retrying connection to the CDN if the connection is lost.
        public let connectionRetryInterval: Int?
        /// Size in seconds of file cache for streaming outputs.
        public let filecacheDuration: Int?
        /// When set to temporal, output files are stored in non-persistent memory for faster reading and writing.
        public let mediaStoreStorageClass: HlsMediaStoreStorageClass?
        /// Number of retry attempts that will be made before the Live Event is put into an error state. Applies only if the CDN destination URI begins with "s3" or "mediastore". For other URIs, the value is always 3.
        public let numRetries: Int?
        /// If a streaming output fails, number of seconds to wait until a restart is initiated. A value of 0 means never restart.
        public let restartDelay: Int?

        @inlinable
        public init(connectionRetryInterval: Int? = nil, filecacheDuration: Int? = nil, mediaStoreStorageClass: HlsMediaStoreStorageClass? = nil, numRetries: Int? = nil, restartDelay: Int? = nil) {
            self.connectionRetryInterval = connectionRetryInterval
            self.filecacheDuration = filecacheDuration
            self.mediaStoreStorageClass = mediaStoreStorageClass
            self.numRetries = numRetries
            self.restartDelay = restartDelay
        }

        public func validate(name: String) throws {
            try self.validate(self.connectionRetryInterval, name: "connectionRetryInterval", parent: name, min: 0)
            try self.validate(self.filecacheDuration, name: "filecacheDuration", parent: name, max: 600)
            try self.validate(self.filecacheDuration, name: "filecacheDuration", parent: name, min: 0)
            try self.validate(self.numRetries, name: "numRetries", parent: name, min: 0)
            try self.validate(self.restartDelay, name: "restartDelay", parent: name, max: 15)
            try self.validate(self.restartDelay, name: "restartDelay", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case connectionRetryInterval = "connectionRetryInterval"
            case filecacheDuration = "filecacheDuration"
            case mediaStoreStorageClass = "mediaStoreStorageClass"
            case numRetries = "numRetries"
            case restartDelay = "restartDelay"
        }
    }

    public struct HlsOutputSettings: AWSEncodableShape & AWSDecodableShape {
        /// Only applicable when this output is referencing an H.265 video description.
        /// Specifies whether MP4 segments should be packaged as HEV1 or HVC1.
        public let h265PackagingType: HlsH265PackagingType?
        /// Settings regarding the underlying stream. These settings are different for audio-only outputs.
        public let hlsSettings: HlsSettings?
        /// String concatenated to the end of the destination filename. Accepts \"Format Identifiers\":#formatIdentifierParameters.
        public let nameModifier: String?
        /// String concatenated to end of segment filenames.
        public let segmentModifier: String?

        @inlinable
        public init(h265PackagingType: HlsH265PackagingType? = nil, hlsSettings: HlsSettings? = nil, nameModifier: String? = nil, segmentModifier: String? = nil) {
            self.h265PackagingType = h265PackagingType
            self.hlsSettings = hlsSettings
            self.nameModifier = nameModifier
            self.segmentModifier = segmentModifier
        }

        public func validate(name: String) throws {
            try self.hlsSettings?.validate(name: "\(name).hlsSettings")
            try self.validate(self.nameModifier, name: "nameModifier", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case h265PackagingType = "h265PackagingType"
            case hlsSettings = "hlsSettings"
            case nameModifier = "nameModifier"
            case segmentModifier = "segmentModifier"
        }
    }

    public struct HlsS3Settings: AWSEncodableShape & AWSDecodableShape {
        /// Specify the canned ACL to apply to each S3 request. Defaults to none.
        public let cannedAcl: S3CannedAcl?

        @inlinable
        public init(cannedAcl: S3CannedAcl? = nil) {
            self.cannedAcl = cannedAcl
        }

        private enum CodingKeys: String, CodingKey {
            case cannedAcl = "cannedAcl"
        }
    }

    public struct HlsSettings: AWSEncodableShape & AWSDecodableShape {
        public let audioOnlyHlsSettings: AudioOnlyHlsSettings?
        public let fmp4HlsSettings: Fmp4HlsSettings?
        public let frameCaptureHlsSettings: FrameCaptureHlsSettings?
        public let standardHlsSettings: StandardHlsSettings?

        @inlinable
        public init(audioOnlyHlsSettings: AudioOnlyHlsSettings? = nil, fmp4HlsSettings: Fmp4HlsSettings? = nil, frameCaptureHlsSettings: FrameCaptureHlsSettings? = nil, standardHlsSettings: StandardHlsSettings? = nil) {
            self.audioOnlyHlsSettings = audioOnlyHlsSettings
            self.fmp4HlsSettings = fmp4HlsSettings
            self.frameCaptureHlsSettings = frameCaptureHlsSettings
            self.standardHlsSettings = standardHlsSettings
        }

        public func validate(name: String) throws {
            try self.audioOnlyHlsSettings?.validate(name: "\(name).audioOnlyHlsSettings")
            try self.standardHlsSettings?.validate(name: "\(name).standardHlsSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case audioOnlyHlsSettings = "audioOnlyHlsSettings"
            case fmp4HlsSettings = "fmp4HlsSettings"
            case frameCaptureHlsSettings = "frameCaptureHlsSettings"
            case standardHlsSettings = "standardHlsSettings"
        }
    }

    public struct HlsTimedMetadataScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        /// Enter a base64 string that contains one or more fully formed ID3 tags.See the ID3 specification: http://id3.org/id3v2.4.0-structure
        public let id3: String?

        @inlinable
        public init(id3: String? = nil) {
            self.id3 = id3
        }

        private enum CodingKeys: String, CodingKey {
            case id3 = "id3"
        }
    }

    public struct HlsWebdavSettings: AWSEncodableShape & AWSDecodableShape {
        /// Number of seconds to wait before retrying connection to the CDN if the connection is lost.
        public let connectionRetryInterval: Int?
        /// Size in seconds of file cache for streaming outputs.
        public let filecacheDuration: Int?
        /// Specify whether or not to use chunked transfer encoding to WebDAV.
        public let httpTransferMode: HlsWebdavHttpTransferMode?
        /// Number of retry attempts that will be made before the Live Event is put into an error state. Applies only if the CDN destination URI begins with "s3" or "mediastore". For other URIs, the value is always 3.
        public let numRetries: Int?
        /// If a streaming output fails, number of seconds to wait until a restart is initiated. A value of 0 means never restart.
        public let restartDelay: Int?

        @inlinable
        public init(connectionRetryInterval: Int? = nil, filecacheDuration: Int? = nil, httpTransferMode: HlsWebdavHttpTransferMode? = nil, numRetries: Int? = nil, restartDelay: Int? = nil) {
            self.connectionRetryInterval = connectionRetryInterval
            self.filecacheDuration = filecacheDuration
            self.httpTransferMode = httpTransferMode
            self.numRetries = numRetries
            self.restartDelay = restartDelay
        }

        public func validate(name: String) throws {
            try self.validate(self.connectionRetryInterval, name: "connectionRetryInterval", parent: name, min: 0)
            try self.validate(self.filecacheDuration, name: "filecacheDuration", parent: name, max: 600)
            try self.validate(self.filecacheDuration, name: "filecacheDuration", parent: name, min: 0)
            try self.validate(self.numRetries, name: "numRetries", parent: name, min: 0)
            try self.validate(self.restartDelay, name: "restartDelay", parent: name, max: 15)
            try self.validate(self.restartDelay, name: "restartDelay", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case connectionRetryInterval = "connectionRetryInterval"
            case filecacheDuration = "filecacheDuration"
            case httpTransferMode = "httpTransferMode"
            case numRetries = "numRetries"
            case restartDelay = "restartDelay"
        }
    }

    public struct HtmlMotionGraphicsSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct Id3SegmentTaggingScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        /// Complete this parameter if you want to specify the entire ID3 metadata. Enter a base64 string that contains one or more fully formed ID3 tags, according to the ID3 specification: http://id3.org/id3v2.4.0-structure
        public let id3: String?
        /// Complete this parameter if you want to specify only the metadata, not the entire frame. MediaLive will insert the metadata in a TXXX frame. Enter the value as plain text. You can include standard MediaLive variable data such as the current segment number.
        public let tag: String?

        @inlinable
        public init(id3: String? = nil, tag: String? = nil) {
            self.id3 = id3
            self.tag = tag
        }

        private enum CodingKeys: String, CodingKey {
            case id3 = "id3"
            case tag = "tag"
        }
    }

    public struct ImmediateModeScheduleActionStartSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct Input: AWSDecodableShape {
        /// The Unique ARN of the input (generated, immutable).
        public let arn: String?
        /// A list of channel IDs that that input is attached to (currently an input can only be attached to one channel).
        public let attachedChannels: [String]?
        /// A list of the destinations of the input (PUSH-type).
        public let destinations: [InputDestination]?
        /// The generated ID of the input (unique for user account, immutable).
        public let id: String?
        /// STANDARD - MediaLive expects two sources to be connected to this input. If the channel is also STANDARD, both sources will be ingested. If the channel is SINGLE_PIPELINE, only the first source will be ingested; the second source will always be ignored, even if the first source fails.
        /// SINGLE_PIPELINE - You can connect only one source to this input. If the ChannelClass is also SINGLE_PIPELINE, this value is valid. If the ChannelClass is STANDARD, this value is not valid because the channel requires two sources in the input.
        public let inputClass: InputClass?
        /// Settings for the input devices.
        public let inputDevices: [InputDeviceSettings]?
        /// The location of this input. AWS, for an input existing in the AWS Cloud, On-Prem for
        /// an input in a customer network.
        public let inputNetworkLocation: InputNetworkLocation?
        /// A list of IDs for all Inputs which are partners of this one.
        public let inputPartnerIds: [String]?
        /// Certain pull input sources can be dynamic, meaning that they can have their URL's dynamically changes
        /// during input switch actions. Presently, this functionality only works with MP4_FILE and TS_FILE inputs.
        public let inputSourceType: InputSourceType?
        /// A list of MediaConnect Flows for this input.
        public let mediaConnectFlows: [MediaConnectFlow]?
        /// Multicast Input settings.
        public let multicastSettings: MulticastSettings?
        /// The user-assigned name (This is a mutable value).
        public let name: String?
        /// The Amazon Resource Name (ARN) of the role this input assumes during and after creation.
        public let roleArn: String?
        public let sdiSources: [String]?
        /// A list of IDs for all the Input Security Groups attached to the input.
        public let securityGroups: [String]?
        /// Include this parameter if the input is a SMPTE 2110 input, to identify the stream sources for this input.
        public let smpte2110ReceiverGroupSettings: Smpte2110ReceiverGroupSettings?
        /// A list of the sources of the input (PULL-type).
        public let sources: [InputSource]?
        /// The settings associated with an SRT input.
        public let srtSettings: SrtSettings?
        public let state: InputState?
        /// A collection of key-value pairs.
        public let tags: [String: String]?
        public let type: InputType?

        @inlinable
        public init(arn: String? = nil, attachedChannels: [String]? = nil, destinations: [InputDestination]? = nil, id: String? = nil, inputClass: InputClass? = nil, inputDevices: [InputDeviceSettings]? = nil, inputNetworkLocation: InputNetworkLocation? = nil, inputPartnerIds: [String]? = nil, inputSourceType: InputSourceType? = nil, mediaConnectFlows: [MediaConnectFlow]? = nil, multicastSettings: MulticastSettings? = nil, name: String? = nil, roleArn: String? = nil, sdiSources: [String]? = nil, securityGroups: [String]? = nil, smpte2110ReceiverGroupSettings: Smpte2110ReceiverGroupSettings? = nil, sources: [InputSource]? = nil, srtSettings: SrtSettings? = nil, state: InputState? = nil, tags: [String: String]? = nil, type: InputType? = nil) {
            self.arn = arn
            self.attachedChannels = attachedChannels
            self.destinations = destinations
            self.id = id
            self.inputClass = inputClass
            self.inputDevices = inputDevices
            self.inputNetworkLocation = inputNetworkLocation
            self.inputPartnerIds = inputPartnerIds
            self.inputSourceType = inputSourceType
            self.mediaConnectFlows = mediaConnectFlows
            self.multicastSettings = multicastSettings
            self.name = name
            self.roleArn = roleArn
            self.sdiSources = sdiSources
            self.securityGroups = securityGroups
            self.smpte2110ReceiverGroupSettings = smpte2110ReceiverGroupSettings
            self.sources = sources
            self.srtSettings = srtSettings
            self.state = state
            self.tags = tags
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case attachedChannels = "attachedChannels"
            case destinations = "destinations"
            case id = "id"
            case inputClass = "inputClass"
            case inputDevices = "inputDevices"
            case inputNetworkLocation = "inputNetworkLocation"
            case inputPartnerIds = "inputPartnerIds"
            case inputSourceType = "inputSourceType"
            case mediaConnectFlows = "mediaConnectFlows"
            case multicastSettings = "multicastSettings"
            case name = "name"
            case roleArn = "roleArn"
            case sdiSources = "sdiSources"
            case securityGroups = "securityGroups"
            case smpte2110ReceiverGroupSettings = "smpte2110ReceiverGroupSettings"
            case sources = "sources"
            case srtSettings = "srtSettings"
            case state = "state"
            case tags = "tags"
            case type = "type"
        }
    }

    public struct InputAttachment: AWSEncodableShape & AWSDecodableShape {
        /// User-specified settings for defining what the conditions are for declaring the input unhealthy and failing over to a different input.
        public let automaticInputFailoverSettings: AutomaticInputFailoverSettings?
        /// User-specified name for the attachment. This is required if the user wants to use this input in an input switch action.
        public let inputAttachmentName: String?
        /// The ID of the input
        public let inputId: String?
        /// Settings of an input (caption selector, etc.)
        public let inputSettings: InputSettings?
        /// Optional assignment of an input to a logical interface on the Node. Only applies to on premises channels.
        public let logicalInterfaceNames: [String]?

        @inlinable
        public init(automaticInputFailoverSettings: AutomaticInputFailoverSettings? = nil, inputAttachmentName: String? = nil, inputId: String? = nil, inputSettings: InputSettings? = nil, logicalInterfaceNames: [String]? = nil) {
            self.automaticInputFailoverSettings = automaticInputFailoverSettings
            self.inputAttachmentName = inputAttachmentName
            self.inputId = inputId
            self.inputSettings = inputSettings
            self.logicalInterfaceNames = logicalInterfaceNames
        }

        public func validate(name: String) throws {
            try self.automaticInputFailoverSettings?.validate(name: "\(name).automaticInputFailoverSettings")
            try self.inputSettings?.validate(name: "\(name).inputSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case automaticInputFailoverSettings = "automaticInputFailoverSettings"
            case inputAttachmentName = "inputAttachmentName"
            case inputId = "inputId"
            case inputSettings = "inputSettings"
            case logicalInterfaceNames = "logicalInterfaceNames"
        }
    }

    public struct InputChannelLevel: AWSEncodableShape & AWSDecodableShape {
        /// Remixing value. Units are in dB and acceptable values are within the range from -60 (mute) and 6 dB.
        public let gain: Int?
        /// The index of the input channel used as a source.
        public let inputChannel: Int?

        @inlinable
        public init(gain: Int? = nil, inputChannel: Int? = nil) {
            self.gain = gain
            self.inputChannel = inputChannel
        }

        public func validate(name: String) throws {
            try self.validate(self.gain, name: "gain", parent: name, max: 6)
            try self.validate(self.gain, name: "gain", parent: name, min: -60)
            try self.validate(self.inputChannel, name: "inputChannel", parent: name, max: 15)
            try self.validate(self.inputChannel, name: "inputChannel", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case gain = "gain"
            case inputChannel = "inputChannel"
        }
    }

    public struct InputClippingSettings: AWSEncodableShape & AWSDecodableShape {
        /// The source of the timecodes in the source being clipped.
        public let inputTimecodeSource: InputTimecodeSource?
        /// Settings to identify the start of the clip.
        public let startTimecode: StartTimecode?
        /// Settings to identify the end of the clip.
        public let stopTimecode: StopTimecode?

        @inlinable
        public init(inputTimecodeSource: InputTimecodeSource? = nil, startTimecode: StartTimecode? = nil, stopTimecode: StopTimecode? = nil) {
            self.inputTimecodeSource = inputTimecodeSource
            self.startTimecode = startTimecode
            self.stopTimecode = stopTimecode
        }

        private enum CodingKeys: String, CodingKey {
            case inputTimecodeSource = "inputTimecodeSource"
            case startTimecode = "startTimecode"
            case stopTimecode = "stopTimecode"
        }
    }

    public struct InputDestination: AWSDecodableShape {
        /// The system-generated static IP address of endpoint.
        /// It remains fixed for the lifetime of the input.
        public let ip: String?
        /// The ID of the attached network.
        public let network: String?
        /// If the push input has an input location of ON-PREM it's a requirement to specify what the route of the input
        /// is going to be on the customer local network.
        public let networkRoutes: [InputDestinationRoute]?
        /// The port number for the input.
        public let port: String?
        /// This represents the endpoint that the customer stream will be
        /// pushed to.
        public let url: String?
        public let vpc: InputDestinationVpc?

        @inlinable
        public init(ip: String? = nil, network: String? = nil, networkRoutes: [InputDestinationRoute]? = nil, port: String? = nil, url: String? = nil, vpc: InputDestinationVpc? = nil) {
            self.ip = ip
            self.network = network
            self.networkRoutes = networkRoutes
            self.port = port
            self.url = url
            self.vpc = vpc
        }

        private enum CodingKeys: String, CodingKey {
            case ip = "ip"
            case network = "network"
            case networkRoutes = "networkRoutes"
            case port = "port"
            case url = "url"
            case vpc = "vpc"
        }
    }

    public struct InputDestinationRequest: AWSEncodableShape {
        /// If the push input has an input location of ON-PREM, ID the ID of the attached network.
        public let network: String?
        /// If the push input has an input location of ON-PREM it's a requirement to specify what the route of the input
        /// is going to be on the customer local network.
        public let networkRoutes: [InputRequestDestinationRoute]?
        /// If the push input has an input location of ON-PREM it's optional to specify what the ip address
        /// of the input is going to be on the customer local network.
        public let staticIpAddress: String?
        /// A unique name for the location the RTMP stream is being pushed
        /// to.
        public let streamName: String?

        @inlinable
        public init(network: String? = nil, networkRoutes: [InputRequestDestinationRoute]? = nil, staticIpAddress: String? = nil, streamName: String? = nil) {
            self.network = network
            self.networkRoutes = networkRoutes
            self.staticIpAddress = staticIpAddress
            self.streamName = streamName
        }

        private enum CodingKeys: String, CodingKey {
            case network = "network"
            case networkRoutes = "networkRoutes"
            case staticIpAddress = "staticIpAddress"
            case streamName = "streamName"
        }
    }

    public struct InputDestinationRoute: AWSDecodableShape {
        /// The CIDR of the route.
        public let cidr: String?
        /// An optional gateway for the route.
        public let gateway: String?

        @inlinable
        public init(cidr: String? = nil, gateway: String? = nil) {
            self.cidr = cidr
            self.gateway = gateway
        }

        private enum CodingKeys: String, CodingKey {
            case cidr = "cidr"
            case gateway = "gateway"
        }
    }

    public struct InputDestinationVpc: AWSDecodableShape {
        /// The availability zone of the Input destination.
        public let availabilityZone: String?
        /// The network interface ID of the Input destination in the VPC.
        public let networkInterfaceId: String?

        @inlinable
        public init(availabilityZone: String? = nil, networkInterfaceId: String? = nil) {
            self.availabilityZone = availabilityZone
            self.networkInterfaceId = networkInterfaceId
        }

        private enum CodingKeys: String, CodingKey {
            case availabilityZone = "availabilityZone"
            case networkInterfaceId = "networkInterfaceId"
        }
    }

    public struct InputDeviceConfigurableAudioChannelPairConfig: AWSEncodableShape {
        /// The ID for one audio pair configuration, a value from 1 to 8.
        public let id: Int?
        /// The profile to set for one audio pair configuration. Choose an enumeration value. Each value describes one audio configuration using the format (rate control algorithm)-(codec)_(quality)-(bitrate in bytes). For example, CBR-AAC_HQ-192000. Or choose DISABLED, in which case the device won't produce audio for this pair.
        public let profile: InputDeviceConfigurableAudioChannelPairProfile?

        @inlinable
        public init(id: Int? = nil, profile: InputDeviceConfigurableAudioChannelPairProfile? = nil) {
            self.id = id
            self.profile = profile
        }

        private enum CodingKeys: String, CodingKey {
            case id = "id"
            case profile = "profile"
        }
    }

    public struct InputDeviceConfigurableSettings: AWSEncodableShape {
        /// An array of eight audio configurations, one for each audio pair in the source. Set up each audio configuration either to exclude the pair, or to format it and include it in the output from the device. This parameter applies only to UHD devices, and only when the device is configured as the source for a MediaConnect flow. For an HD device, you configure the audio by setting up audio selectors in the channel configuration.
        public let audioChannelPairs: [InputDeviceConfigurableAudioChannelPairConfig]?
        /// Choose the codec for the video that the device produces. Only UHD devices can specify this parameter.
        public let codec: InputDeviceCodec?
        /// The input source that you want to use. If the device has a source connected to only one of its input ports, or if you don't care which source the device sends, specify Auto. If the device has sources connected to both its input ports, and you want to use a specific source, specify the source.
        public let configuredInput: InputDeviceConfiguredInput?
        /// Choose the resolution of the Link device's source (HD or UHD). Make sure the resolution matches the current source from the device. This value determines MediaLive resource allocation and billing for this input. Only UHD devices can specify this parameter.
        public let inputResolution: String?
        /// The Link device's buffer size (latency) in milliseconds (ms).
        public let latencyMs: Int?
        /// The maximum bitrate in bits per second. Set a value here to throttle the bitrate of the source video.
        public let maxBitrate: Int?
        /// To attach this device to a MediaConnect flow, specify these parameters. To detach an existing flow, enter {} for the value of mediaconnectSettings. Only UHD devices can specify this parameter.
        public let mediaconnectSettings: InputDeviceMediaConnectConfigurableSettings?

        @inlinable
        public init(audioChannelPairs: [InputDeviceConfigurableAudioChannelPairConfig]? = nil, codec: InputDeviceCodec? = nil, configuredInput: InputDeviceConfiguredInput? = nil, inputResolution: String? = nil, latencyMs: Int? = nil, maxBitrate: Int? = nil, mediaconnectSettings: InputDeviceMediaConnectConfigurableSettings? = nil) {
            self.audioChannelPairs = audioChannelPairs
            self.codec = codec
            self.configuredInput = configuredInput
            self.inputResolution = inputResolution
            self.latencyMs = latencyMs
            self.maxBitrate = maxBitrate
            self.mediaconnectSettings = mediaconnectSettings
        }

        private enum CodingKeys: String, CodingKey {
            case audioChannelPairs = "audioChannelPairs"
            case codec = "codec"
            case configuredInput = "configuredInput"
            case inputResolution = "inputResolution"
            case latencyMs = "latencyMs"
            case maxBitrate = "maxBitrate"
            case mediaconnectSettings = "mediaconnectSettings"
        }
    }

    public struct InputDeviceHdSettings: AWSDecodableShape {
        /// If you specified Auto as the configured input, specifies which of the sources is currently active (SDI or HDMI).
        public let activeInput: InputDeviceActiveInput?
        /// The source at the input device that is currently active. You can specify this source.
        public let configuredInput: InputDeviceConfiguredInput?
        /// The state of the input device.
        public let deviceState: InputDeviceState?
        /// The frame rate of the video source.
        public let framerate: Double?
        /// The height of the video source, in pixels.
        public let height: Int?
        /// The Link device's buffer size (latency) in milliseconds (ms). You can specify this value.
        public let latencyMs: Int?
        /// The current maximum bitrate for ingesting this source, in bits per second. You can specify this maximum.
        public let maxBitrate: Int?
        /// The scan type of the video source.
        public let scanType: InputDeviceScanType?
        /// The width of the video source, in pixels.
        public let width: Int?

        @inlinable
        public init(activeInput: InputDeviceActiveInput? = nil, configuredInput: InputDeviceConfiguredInput? = nil, deviceState: InputDeviceState? = nil, framerate: Double? = nil, height: Int? = nil, latencyMs: Int? = nil, maxBitrate: Int? = nil, scanType: InputDeviceScanType? = nil, width: Int? = nil) {
            self.activeInput = activeInput
            self.configuredInput = configuredInput
            self.deviceState = deviceState
            self.framerate = framerate
            self.height = height
            self.latencyMs = latencyMs
            self.maxBitrate = maxBitrate
            self.scanType = scanType
            self.width = width
        }

        private enum CodingKeys: String, CodingKey {
            case activeInput = "activeInput"
            case configuredInput = "configuredInput"
            case deviceState = "deviceState"
            case framerate = "framerate"
            case height = "height"
            case latencyMs = "latencyMs"
            case maxBitrate = "maxBitrate"
            case scanType = "scanType"
            case width = "width"
        }
    }

    public struct InputDeviceMediaConnectConfigurableSettings: AWSEncodableShape {
        /// The ARN of the MediaConnect flow to attach this device to.
        public let flowArn: String?
        /// The ARN for the role that MediaLive assumes to access the attached flow and secret. For more information about how to create this role, see the MediaLive user guide.
        public let roleArn: String?
        /// The ARN for the secret that holds the encryption key to encrypt the content output by the device.
        public let secretArn: String?
        /// The name of the MediaConnect Flow source to stream to.
        public let sourceName: String?

        @inlinable
        public init(flowArn: String? = nil, roleArn: String? = nil, secretArn: String? = nil, sourceName: String? = nil) {
            self.flowArn = flowArn
            self.roleArn = roleArn
            self.secretArn = secretArn
            self.sourceName = sourceName
        }

        private enum CodingKeys: String, CodingKey {
            case flowArn = "flowArn"
            case roleArn = "roleArn"
            case secretArn = "secretArn"
            case sourceName = "sourceName"
        }
    }

    public struct InputDeviceMediaConnectSettings: AWSDecodableShape {
        /// The ARN of the MediaConnect flow.
        public let flowArn: String?
        /// The ARN for the role that MediaLive assumes to access the attached flow and secret.
        public let roleArn: String?
        /// The ARN of the secret used to encrypt the stream.
        public let secretArn: String?
        /// The name of the MediaConnect flow source.
        public let sourceName: String?

        @inlinable
        public init(flowArn: String? = nil, roleArn: String? = nil, secretArn: String? = nil, sourceName: String? = nil) {
            self.flowArn = flowArn
            self.roleArn = roleArn
            self.secretArn = secretArn
            self.sourceName = sourceName
        }

        private enum CodingKeys: String, CodingKey {
            case flowArn = "flowArn"
            case roleArn = "roleArn"
            case secretArn = "secretArn"
            case sourceName = "sourceName"
        }
    }

    public struct InputDeviceNetworkSettings: AWSDecodableShape {
        /// The DNS addresses of the input device.
        public let dnsAddresses: [String]?
        /// The network gateway IP address.
        public let gateway: String?
        /// The IP address of the input device.
        public let ipAddress: String?
        /// Specifies whether the input device has been configured (outside of MediaLive) to use a dynamic IP address assignment (DHCP) or a static IP address.
        public let ipScheme: InputDeviceIpScheme?
        /// The subnet mask of the input device.
        public let subnetMask: String?

        @inlinable
        public init(dnsAddresses: [String]? = nil, gateway: String? = nil, ipAddress: String? = nil, ipScheme: InputDeviceIpScheme? = nil, subnetMask: String? = nil) {
            self.dnsAddresses = dnsAddresses
            self.gateway = gateway
            self.ipAddress = ipAddress
            self.ipScheme = ipScheme
            self.subnetMask = subnetMask
        }

        private enum CodingKeys: String, CodingKey {
            case dnsAddresses = "dnsAddresses"
            case gateway = "gateway"
            case ipAddress = "ipAddress"
            case ipScheme = "ipScheme"
            case subnetMask = "subnetMask"
        }
    }

    public struct InputDeviceRequest: AWSEncodableShape {
        /// The unique ID for the device.
        public let id: String?

        @inlinable
        public init(id: String? = nil) {
            self.id = id
        }

        private enum CodingKeys: String, CodingKey {
            case id = "id"
        }
    }

    public struct InputDeviceSettings: AWSEncodableShape & AWSDecodableShape {
        /// The unique ID for the device.
        public let id: String?

        @inlinable
        public init(id: String? = nil) {
            self.id = id
        }

        private enum CodingKeys: String, CodingKey {
            case id = "id"
        }
    }

    public struct InputDeviceSummary: AWSDecodableShape {
        /// The unique ARN of the input device.
        public let arn: String?
        /// The Availability Zone associated with this input device.
        public let availabilityZone: String?
        /// The state of the connection between the input device and AWS.
        public let connectionState: InputDeviceConnectionState?
        /// The status of the action to synchronize the device configuration. If you change the configuration of the input device (for example, the maximum bitrate), MediaLive sends the new data to the device. The device might not update itself immediately. SYNCED means the device has updated its configuration. SYNCING means that it has not updated its configuration.
        public let deviceSettingsSyncState: DeviceSettingsSyncState?
        /// The status of software on the input device.
        public let deviceUpdateStatus: DeviceUpdateStatus?
        /// Settings that describe an input device that is type HD.
        public let hdDeviceSettings: InputDeviceHdSettings?
        /// The unique ID of the input device.
        public let id: String?
        /// The network MAC address of the input device.
        public let macAddress: String?
        /// An array of the ARNs for the MediaLive inputs attached to the device. Returned only if the outputType is MEDIALIVE_INPUT.
        public let medialiveInputArns: [String]?
        /// A name that you specify for the input device.
        public let name: String?
        /// Network settings for the input device.
        public let networkSettings: InputDeviceNetworkSettings?
        /// The output attachment type of the input device. Specifies MEDIACONNECT_FLOW if this device is the source for a MediaConnect flow. Specifies MEDIALIVE_INPUT if this device is the source for a MediaLive input.
        public let outputType: InputDeviceOutputType?
        /// The unique serial number of the input device.
        public let serialNumber: String?
        /// A collection of key-value pairs.
        public let tags: [String: String]?
        /// The type of the input device.
        public let type: InputDeviceType?
        /// Settings that describe an input device that is type UHD.
        public let uhdDeviceSettings: InputDeviceUhdSettings?

        @inlinable
        public init(arn: String? = nil, availabilityZone: String? = nil, connectionState: InputDeviceConnectionState? = nil, deviceSettingsSyncState: DeviceSettingsSyncState? = nil, deviceUpdateStatus: DeviceUpdateStatus? = nil, hdDeviceSettings: InputDeviceHdSettings? = nil, id: String? = nil, macAddress: String? = nil, medialiveInputArns: [String]? = nil, name: String? = nil, networkSettings: InputDeviceNetworkSettings? = nil, outputType: InputDeviceOutputType? = nil, serialNumber: String? = nil, tags: [String: String]? = nil, type: InputDeviceType? = nil, uhdDeviceSettings: InputDeviceUhdSettings? = nil) {
            self.arn = arn
            self.availabilityZone = availabilityZone
            self.connectionState = connectionState
            self.deviceSettingsSyncState = deviceSettingsSyncState
            self.deviceUpdateStatus = deviceUpdateStatus
            self.hdDeviceSettings = hdDeviceSettings
            self.id = id
            self.macAddress = macAddress
            self.medialiveInputArns = medialiveInputArns
            self.name = name
            self.networkSettings = networkSettings
            self.outputType = outputType
            self.serialNumber = serialNumber
            self.tags = tags
            self.type = type
            self.uhdDeviceSettings = uhdDeviceSettings
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case availabilityZone = "availabilityZone"
            case connectionState = "connectionState"
            case deviceSettingsSyncState = "deviceSettingsSyncState"
            case deviceUpdateStatus = "deviceUpdateStatus"
            case hdDeviceSettings = "hdDeviceSettings"
            case id = "id"
            case macAddress = "macAddress"
            case medialiveInputArns = "medialiveInputArns"
            case name = "name"
            case networkSettings = "networkSettings"
            case outputType = "outputType"
            case serialNumber = "serialNumber"
            case tags = "tags"
            case type = "type"
            case uhdDeviceSettings = "uhdDeviceSettings"
        }
    }

    public struct InputDeviceUhdAudioChannelPairConfig: AWSDecodableShape {
        /// The ID for one audio pair configuration, a value from 1 to 8.
        public let id: Int?
        /// The profile for one audio pair configuration. This property describes one audio configuration in the format (rate control algorithm)-(codec)_(quality)-(bitrate in bytes). For example, CBR-AAC_HQ-192000. Or DISABLED, in which case the device won't produce audio for this pair.
        public let profile: InputDeviceUhdAudioChannelPairProfile?

        @inlinable
        public init(id: Int? = nil, profile: InputDeviceUhdAudioChannelPairProfile? = nil) {
            self.id = id
            self.profile = profile
        }

        private enum CodingKeys: String, CodingKey {
            case id = "id"
            case profile = "profile"
        }
    }

    public struct InputDeviceUhdSettings: AWSDecodableShape {
        /// If you specified Auto as the configured input, specifies which of the sources is currently active (SDI or HDMI).
        public let activeInput: InputDeviceActiveInput?
        /// An array of eight audio configurations, one for each audio pair in the source. Each audio configuration specifies either to exclude the pair, or to format it and include it in the output from the UHD device. Applies only when the device is configured as the source for a MediaConnect flow.
        public let audioChannelPairs: [InputDeviceUhdAudioChannelPairConfig]?
        /// The codec for the video that the device produces.
        public let codec: InputDeviceCodec?
        /// The source at the input device that is currently active. You can specify this source.
        public let configuredInput: InputDeviceConfiguredInput?
        /// The state of the input device.
        public let deviceState: InputDeviceState?
        /// The frame rate of the video source.
        public let framerate: Double?
        /// The height of the video source, in pixels.
        public let height: Int?
        /// The resolution of the Link device's source (HD or UHD). This value determines MediaLive resource allocation and billing for this input.
        public let inputResolution: String?
        /// The Link device's buffer size (latency) in milliseconds (ms). You can specify this value.
        public let latencyMs: Int?
        /// The current maximum bitrate for ingesting this source, in bits per second. You can specify this maximum.
        public let maxBitrate: Int?
        /// Information about the MediaConnect flow attached to the device. Returned only if the outputType is MEDIACONNECT_FLOW.
        public let mediaconnectSettings: InputDeviceMediaConnectSettings?
        /// The scan type of the video source.
        public let scanType: InputDeviceScanType?
        /// The width of the video source, in pixels.
        public let width: Int?

        @inlinable
        public init(activeInput: InputDeviceActiveInput? = nil, audioChannelPairs: [InputDeviceUhdAudioChannelPairConfig]? = nil, codec: InputDeviceCodec? = nil, configuredInput: InputDeviceConfiguredInput? = nil, deviceState: InputDeviceState? = nil, framerate: Double? = nil, height: Int? = nil, inputResolution: String? = nil, latencyMs: Int? = nil, maxBitrate: Int? = nil, mediaconnectSettings: InputDeviceMediaConnectSettings? = nil, scanType: InputDeviceScanType? = nil, width: Int? = nil) {
            self.activeInput = activeInput
            self.audioChannelPairs = audioChannelPairs
            self.codec = codec
            self.configuredInput = configuredInput
            self.deviceState = deviceState
            self.framerate = framerate
            self.height = height
            self.inputResolution = inputResolution
            self.latencyMs = latencyMs
            self.maxBitrate = maxBitrate
            self.mediaconnectSettings = mediaconnectSettings
            self.scanType = scanType
            self.width = width
        }

        private enum CodingKeys: String, CodingKey {
            case activeInput = "activeInput"
            case audioChannelPairs = "audioChannelPairs"
            case codec = "codec"
            case configuredInput = "configuredInput"
            case deviceState = "deviceState"
            case framerate = "framerate"
            case height = "height"
            case inputResolution = "inputResolution"
            case latencyMs = "latencyMs"
            case maxBitrate = "maxBitrate"
            case mediaconnectSettings = "mediaconnectSettings"
            case scanType = "scanType"
            case width = "width"
        }
    }

    public struct InputLocation: AWSEncodableShape & AWSDecodableShape {
        /// key used to extract the password from EC2 Parameter store
        public let passwordParam: String?
        /// Uniform Resource Identifier - This should be a path to a file accessible to the Live system (eg. a http:// URI) depending on the output type. For example, a RTMP destination should have a uri simliar to: "rtmp://fmsserver/live".
        public let uri: String?
        /// Documentation update needed
        public let username: String?

        @inlinable
        public init(passwordParam: String? = nil, uri: String? = nil, username: String? = nil) {
            self.passwordParam = passwordParam
            self.uri = uri
            self.username = username
        }

        public func validate(name: String) throws {
            try self.validate(self.uri, name: "uri", parent: name, max: 2048)
        }

        private enum CodingKeys: String, CodingKey {
            case passwordParam = "passwordParam"
            case uri = "uri"
            case username = "username"
        }
    }

    public struct InputLossBehavior: AWSEncodableShape & AWSDecodableShape {
        /// Documentation update needed
        public let blackFrameMsec: Int?
        /// When input loss image type is "color" this field specifies the color to use. Value: 6 hex characters representing the values of RGB.
        public let inputLossImageColor: String?
        /// When input loss image type is "slate" these fields specify the parameters for accessing the slate.
        public let inputLossImageSlate: InputLocation?
        /// Indicates whether to substitute a solid color or a slate into the output after input loss exceeds blackFrameMsec.
        public let inputLossImageType: InputLossImageType?
        /// Documentation update needed
        public let repeatFrameMsec: Int?

        @inlinable
        public init(blackFrameMsec: Int? = nil, inputLossImageColor: String? = nil, inputLossImageSlate: InputLocation? = nil, inputLossImageType: InputLossImageType? = nil, repeatFrameMsec: Int? = nil) {
            self.blackFrameMsec = blackFrameMsec
            self.inputLossImageColor = inputLossImageColor
            self.inputLossImageSlate = inputLossImageSlate
            self.inputLossImageType = inputLossImageType
            self.repeatFrameMsec = repeatFrameMsec
        }

        public func validate(name: String) throws {
            try self.validate(self.blackFrameMsec, name: "blackFrameMsec", parent: name, max: 1000000)
            try self.validate(self.blackFrameMsec, name: "blackFrameMsec", parent: name, min: 0)
            try self.validate(self.inputLossImageColor, name: "inputLossImageColor", parent: name, max: 6)
            try self.validate(self.inputLossImageColor, name: "inputLossImageColor", parent: name, min: 6)
            try self.inputLossImageSlate?.validate(name: "\(name).inputLossImageSlate")
            try self.validate(self.repeatFrameMsec, name: "repeatFrameMsec", parent: name, max: 1000000)
            try self.validate(self.repeatFrameMsec, name: "repeatFrameMsec", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case blackFrameMsec = "blackFrameMsec"
            case inputLossImageColor = "inputLossImageColor"
            case inputLossImageSlate = "inputLossImageSlate"
            case inputLossImageType = "inputLossImageType"
            case repeatFrameMsec = "repeatFrameMsec"
        }
    }

    public struct InputLossFailoverSettings: AWSEncodableShape & AWSDecodableShape {
        /// The amount of time (in milliseconds) that no input is detected. After that time, an input failover will occur.
        public let inputLossThresholdMsec: Int?

        @inlinable
        public init(inputLossThresholdMsec: Int? = nil) {
            self.inputLossThresholdMsec = inputLossThresholdMsec
        }

        public func validate(name: String) throws {
            try self.validate(self.inputLossThresholdMsec, name: "inputLossThresholdMsec", parent: name, min: 100)
        }

        private enum CodingKeys: String, CodingKey {
            case inputLossThresholdMsec = "inputLossThresholdMsec"
        }
    }

    public struct InputPrepareScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        /// The name of the input attachment that should be prepared by this action. If no name is provided, the action will stop the most recent prepare (if any) when activated.
        public let inputAttachmentNameReference: String?
        /// Settings to let you create a clip of the file input, in order to set up the input to ingest only a portion of the file.
        public let inputClippingSettings: InputClippingSettings?
        /// The value for the variable portion of the URL for the dynamic input, for this instance of the input. Each time you use the same dynamic input in an input switch action, you can provide a different value, in order to connect the input to a different content source.
        public let urlPath: [String]?

        @inlinable
        public init(inputAttachmentNameReference: String? = nil, inputClippingSettings: InputClippingSettings? = nil, urlPath: [String]? = nil) {
            self.inputAttachmentNameReference = inputAttachmentNameReference
            self.inputClippingSettings = inputClippingSettings
            self.urlPath = urlPath
        }

        private enum CodingKeys: String, CodingKey {
            case inputAttachmentNameReference = "inputAttachmentNameReference"
            case inputClippingSettings = "inputClippingSettings"
            case urlPath = "urlPath"
        }
    }

    public struct InputRequestDestinationRoute: AWSEncodableShape {
        /// The CIDR of the route.
        public let cidr: String?
        /// An optional gateway for the route.
        public let gateway: String?

        @inlinable
        public init(cidr: String? = nil, gateway: String? = nil) {
            self.cidr = cidr
            self.gateway = gateway
        }

        private enum CodingKeys: String, CodingKey {
            case cidr = "cidr"
            case gateway = "gateway"
        }
    }

    public struct InputSdpLocation: AWSEncodableShape & AWSDecodableShape {
        /// The index of the media stream in the SDP file for one SMPTE 2110 stream.
        public let mediaIndex: Int?
        /// The URL of the SDP file for one SMPTE 2110 stream.
        public let sdpUrl: String?

        @inlinable
        public init(mediaIndex: Int? = nil, sdpUrl: String? = nil) {
            self.mediaIndex = mediaIndex
            self.sdpUrl = sdpUrl
        }

        private enum CodingKeys: String, CodingKey {
            case mediaIndex = "mediaIndex"
            case sdpUrl = "sdpUrl"
        }
    }

    public struct InputSecurityGroup: AWSDecodableShape {
        /// Unique ARN of Input Security Group
        public let arn: String?
        /// The Id of the Input Security Group
        public let id: String?
        /// The list of inputs currently using this Input Security Group.
        public let inputs: [String]?
        /// The current state of the Input Security Group.
        public let state: InputSecurityGroupState?
        /// A collection of key-value pairs.
        public let tags: [String: String]?
        /// Whitelist rules and their sync status
        public let whitelistRules: [InputWhitelistRule]?

        @inlinable
        public init(arn: String? = nil, id: String? = nil, inputs: [String]? = nil, state: InputSecurityGroupState? = nil, tags: [String: String]? = nil, whitelistRules: [InputWhitelistRule]? = nil) {
            self.arn = arn
            self.id = id
            self.inputs = inputs
            self.state = state
            self.tags = tags
            self.whitelistRules = whitelistRules
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case id = "id"
            case inputs = "inputs"
            case state = "state"
            case tags = "tags"
            case whitelistRules = "whitelistRules"
        }
    }

    public struct InputSettings: AWSEncodableShape & AWSDecodableShape {
        /// Used to select the audio stream to decode for inputs that have multiple available.
        public let audioSelectors: [AudioSelector]?
        /// Used to select the caption input to use for inputs that have multiple available.
        public let captionSelectors: [CaptionSelector]?
        /// Enable or disable the deblock filter when filtering.
        public let deblockFilter: InputDeblockFilter?
        /// Enable or disable the denoise filter when filtering.
        public let denoiseFilter: InputDenoiseFilter?
        /// Adjusts the magnitude of filtering from 1 (minimal) to 5 (strongest).
        public let filterStrength: Int?
        /// Turns on the filter for this input. MPEG-2 inputs have the deblocking filter enabled by default.
        /// 1) auto - filtering will be applied depending on input type/quality
        /// 2) disabled - no filtering will be applied to the input
        /// 3) forced - filtering will be applied regardless of input type
        public let inputFilter: InputFilter?
        /// Input settings.
        public let networkInputSettings: NetworkInputSettings?
        /// PID from which to read SCTE-35 messages. If left undefined, EML will select the first SCTE-35 PID found in the input.
        public let scte35Pid: Int?
        /// Specifies whether to extract applicable ancillary data from a SMPTE-2038 source in this input. Applicable data types are captions, timecode, AFD, and SCTE-104 messages.
        /// - PREFER: Extract from SMPTE-2038 if present in this input, otherwise extract from another source (if any).
        /// - IGNORE: Never extract any ancillary data from SMPTE-2038.
        public let smpte2038DataPreference: Smpte2038DataPreference?
        /// Loop input if it is a file. This allows a file input to be streamed indefinitely.
        public let sourceEndBehavior: InputSourceEndBehavior?
        /// Informs which video elementary stream to decode for input types that have multiple available.
        public let videoSelector: VideoSelector?

        @inlinable
        public init(audioSelectors: [AudioSelector]? = nil, captionSelectors: [CaptionSelector]? = nil, deblockFilter: InputDeblockFilter? = nil, denoiseFilter: InputDenoiseFilter? = nil, filterStrength: Int? = nil, inputFilter: InputFilter? = nil, networkInputSettings: NetworkInputSettings? = nil, scte35Pid: Int? = nil, smpte2038DataPreference: Smpte2038DataPreference? = nil, sourceEndBehavior: InputSourceEndBehavior? = nil, videoSelector: VideoSelector? = nil) {
            self.audioSelectors = audioSelectors
            self.captionSelectors = captionSelectors
            self.deblockFilter = deblockFilter
            self.denoiseFilter = denoiseFilter
            self.filterStrength = filterStrength
            self.inputFilter = inputFilter
            self.networkInputSettings = networkInputSettings
            self.scte35Pid = scte35Pid
            self.smpte2038DataPreference = smpte2038DataPreference
            self.sourceEndBehavior = sourceEndBehavior
            self.videoSelector = videoSelector
        }

        public func validate(name: String) throws {
            try self.audioSelectors?.forEach {
                try $0.validate(name: "\(name).audioSelectors[]")
            }
            try self.captionSelectors?.forEach {
                try $0.validate(name: "\(name).captionSelectors[]")
            }
            try self.validate(self.filterStrength, name: "filterStrength", parent: name, max: 5)
            try self.validate(self.filterStrength, name: "filterStrength", parent: name, min: 1)
            try self.networkInputSettings?.validate(name: "\(name).networkInputSettings")
            try self.validate(self.scte35Pid, name: "scte35Pid", parent: name, max: 8191)
            try self.validate(self.scte35Pid, name: "scte35Pid", parent: name, min: 32)
            try self.videoSelector?.validate(name: "\(name).videoSelector")
        }

        private enum CodingKeys: String, CodingKey {
            case audioSelectors = "audioSelectors"
            case captionSelectors = "captionSelectors"
            case deblockFilter = "deblockFilter"
            case denoiseFilter = "denoiseFilter"
            case filterStrength = "filterStrength"
            case inputFilter = "inputFilter"
            case networkInputSettings = "networkInputSettings"
            case scte35Pid = "scte35Pid"
            case smpte2038DataPreference = "smpte2038DataPreference"
            case sourceEndBehavior = "sourceEndBehavior"
            case videoSelector = "videoSelector"
        }
    }

    public struct InputSource: AWSDecodableShape {
        /// The key used to extract the password from EC2 Parameter store.
        public let passwordParam: String?
        /// This represents the customer's source URL where stream is
        /// pulled from.
        public let url: String?
        /// The username for the input source.
        public let username: String?

        @inlinable
        public init(passwordParam: String? = nil, url: String? = nil, username: String? = nil) {
            self.passwordParam = passwordParam
            self.url = url
            self.username = username
        }

        private enum CodingKeys: String, CodingKey {
            case passwordParam = "passwordParam"
            case url = "url"
            case username = "username"
        }
    }

    public struct InputSourceRequest: AWSEncodableShape {
        /// The key used to extract the password from EC2 Parameter store.
        public let passwordParam: String?
        /// This represents the customer's source URL where stream is
        /// pulled from.
        public let url: String?
        /// The username for the input source.
        public let username: String?

        @inlinable
        public init(passwordParam: String? = nil, url: String? = nil, username: String? = nil) {
            self.passwordParam = passwordParam
            self.url = url
            self.username = username
        }

        private enum CodingKeys: String, CodingKey {
            case passwordParam = "passwordParam"
            case url = "url"
            case username = "username"
        }
    }

    public struct InputSpecification: AWSEncodableShape & AWSDecodableShape {
        /// Input codec
        public let codec: InputCodec?
        /// Maximum input bitrate, categorized coarsely
        public let maximumBitrate: InputMaximumBitrate?
        /// Input resolution, categorized coarsely
        public let resolution: InputResolution?

        @inlinable
        public init(codec: InputCodec? = nil, maximumBitrate: InputMaximumBitrate? = nil, resolution: InputResolution? = nil) {
            self.codec = codec
            self.maximumBitrate = maximumBitrate
            self.resolution = resolution
        }

        private enum CodingKeys: String, CodingKey {
            case codec = "codec"
            case maximumBitrate = "maximumBitrate"
            case resolution = "resolution"
        }
    }

    public struct InputSwitchScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        /// The name of the input attachment (not the name of the input!) to switch to. The name is specified in the channel configuration.
        public let inputAttachmentNameReference: String?
        /// Settings to let you create a clip of the file input, in order to set up the input to ingest only a portion of the file.
        public let inputClippingSettings: InputClippingSettings?
        /// The value for the variable portion of the URL for the dynamic input, for this instance of the input. Each time you use the same dynamic input in an input switch action, you can provide a different value, in order to connect the input to a different content source.
        public let urlPath: [String]?

        @inlinable
        public init(inputAttachmentNameReference: String? = nil, inputClippingSettings: InputClippingSettings? = nil, urlPath: [String]? = nil) {
            self.inputAttachmentNameReference = inputAttachmentNameReference
            self.inputClippingSettings = inputClippingSettings
            self.urlPath = urlPath
        }

        private enum CodingKeys: String, CodingKey {
            case inputAttachmentNameReference = "inputAttachmentNameReference"
            case inputClippingSettings = "inputClippingSettings"
            case urlPath = "urlPath"
        }
    }

    public struct InputVpcRequest: AWSEncodableShape {
        /// A list of up to 5 EC2 VPC security group IDs to attach to the Input VPC network interfaces.
        /// Requires subnetIds. If none are specified then the VPC default security group will be used.
        public let securityGroupIds: [String]?
        /// A list of 2 VPC subnet IDs from the same VPC.
        /// Subnet IDs must be mapped to two unique availability zones (AZ).
        public let subnetIds: [String]?

        @inlinable
        public init(securityGroupIds: [String]? = nil, subnetIds: [String]? = nil) {
            self.securityGroupIds = securityGroupIds
            self.subnetIds = subnetIds
        }

        private enum CodingKeys: String, CodingKey {
            case securityGroupIds = "securityGroupIds"
            case subnetIds = "subnetIds"
        }
    }

    public struct InputWhitelistRule: AWSDecodableShape {
        /// The IPv4 CIDR that's whitelisted.
        public let cidr: String?

        @inlinable
        public init(cidr: String? = nil) {
            self.cidr = cidr
        }

        private enum CodingKeys: String, CodingKey {
            case cidr = "cidr"
        }
    }

    public struct InputWhitelistRuleCidr: AWSEncodableShape {
        /// The IPv4 CIDR to whitelist.
        public let cidr: String?

        @inlinable
        public init(cidr: String? = nil) {
            self.cidr = cidr
        }

        private enum CodingKeys: String, CodingKey {
            case cidr = "cidr"
        }
    }

    public struct InterfaceMapping: AWSDecodableShape {
        /// The logical name for one interface (on every Node) that handles a specific type of traffic. We recommend that the name hints at the physical interface it applies to. For example, it could refer to the traffic that the physical interface handles. For example, my-Inputs-Interface.
        public let logicalInterfaceName: String?
        /// The ID of the network that you want to connect to the specified logicalInterfaceName.
        public let networkId: String?

        @inlinable
        public init(logicalInterfaceName: String? = nil, networkId: String? = nil) {
            self.logicalInterfaceName = logicalInterfaceName
            self.networkId = networkId
        }

        private enum CodingKeys: String, CodingKey {
            case logicalInterfaceName = "logicalInterfaceName"
            case networkId = "networkId"
        }
    }

    public struct InterfaceMappingCreateRequest: AWSEncodableShape {
        /// The logical name for one interface (on every Node) that handles a specific type of traffic. We recommend that the name hints at the physical interface it applies to. For example, it could refer to the traffic that the physical interface handles. For example, my-Inputs-Interface.
        public let logicalInterfaceName: String?
        /// The ID of the network that you want to connect to the specified logicalInterfaceName.
        public let networkId: String?

        @inlinable
        public init(logicalInterfaceName: String? = nil, networkId: String? = nil) {
            self.logicalInterfaceName = logicalInterfaceName
            self.networkId = networkId
        }

        private enum CodingKeys: String, CodingKey {
            case logicalInterfaceName = "logicalInterfaceName"
            case networkId = "networkId"
        }
    }

    public struct InterfaceMappingUpdateRequest: AWSEncodableShape {
        /// The logical name for one interface (on every Node) that handles a specific type of traffic. We recommend that the name hints at the physical interface it applies to. For example, it could refer to the traffic that the physical interface handles. For example, my-Inputs-Interface.
        public let logicalInterfaceName: String?
        /// The ID of the network that you want to connect to the specified logicalInterfaceName. You can use the ListNetworks operation to discover all the IDs.
        public let networkId: String?

        @inlinable
        public init(logicalInterfaceName: String? = nil, networkId: String? = nil) {
            self.logicalInterfaceName = logicalInterfaceName
            self.networkId = networkId
        }

        private enum CodingKeys: String, CodingKey {
            case logicalInterfaceName = "logicalInterfaceName"
            case networkId = "networkId"
        }
    }

    public struct IpPool: AWSDecodableShape {
        /// A CIDR block of IP addresses that are reserved for MediaLive Anywhere.
        public let cidr: String?

        @inlinable
        public init(cidr: String? = nil) {
            self.cidr = cidr
        }

        private enum CodingKeys: String, CodingKey {
            case cidr = "cidr"
        }
    }

    public struct IpPoolCreateRequest: AWSEncodableShape {
        /// A CIDR block of IP addresses to reserve for MediaLive Anywhere.
        public let cidr: String?

        @inlinable
        public init(cidr: String? = nil) {
            self.cidr = cidr
        }

        private enum CodingKeys: String, CodingKey {
            case cidr = "cidr"
        }
    }

    public struct IpPoolUpdateRequest: AWSEncodableShape {
        /// A CIDR block of IP addresses to reserve for MediaLive Anywhere.
        public let cidr: String?

        @inlinable
        public init(cidr: String? = nil) {
            self.cidr = cidr
        }

        private enum CodingKeys: String, CodingKey {
            case cidr = "cidr"
        }
    }

    public struct KeyProviderSettings: AWSEncodableShape & AWSDecodableShape {
        public let staticKeySettings: StaticKeySettings?

        @inlinable
        public init(staticKeySettings: StaticKeySettings? = nil) {
            self.staticKeySettings = staticKeySettings
        }

        public func validate(name: String) throws {
            try self.staticKeySettings?.validate(name: "\(name).staticKeySettings")
        }

        private enum CodingKeys: String, CodingKey {
            case staticKeySettings = "staticKeySettings"
        }
    }

    public struct ListChannelPlacementGroupsRequest: AWSEncodableShape {
        /// The ID of the cluster
        public let clusterId: String
        /// The maximum number of items to return.
        public let maxResults: Int?
        /// The token to retrieve the next page of results.
        public let nextToken: String?

        @inlinable
        public init(clusterId: String, maxResults: Int? = nil, nextToken: String? = nil) {
            self.clusterId = clusterId
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.clusterId, key: "ClusterId")
            request.encodeQuery(self.maxResults, key: "maxResults")
            request.encodeQuery(self.nextToken, key: "nextToken")
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListChannelPlacementGroupsResponse: AWSDecodableShape {
        /// An array of ChannelPlacementGroups that exist in the Cluster.
        public let channelPlacementGroups: [DescribeChannelPlacementGroupSummary]?
        /// Token for the next result.
        public let nextToken: String?

        @inlinable
        public init(channelPlacementGroups: [DescribeChannelPlacementGroupSummary]? = nil, nextToken: String? = nil) {
            self.channelPlacementGroups = channelPlacementGroups
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case channelPlacementGroups = "channelPlacementGroups"
            case nextToken = "nextToken"
        }
    }

    public struct ListChannelsRequest: AWSEncodableShape {
        public let maxResults: Int?
        public let nextToken: String?

        @inlinable
        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodeQuery(self.maxResults, key: "maxResults")
            request.encodeQuery(self.nextToken, key: "nextToken")
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListChannelsResponse: AWSDecodableShape {
        public let channels: [ChannelSummary]?
        public let nextToken: String?

        @inlinable
        public init(channels: [ChannelSummary]? = nil, nextToken: String? = nil) {
            self.channels = channels
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case channels = "channels"
            case nextToken = "nextToken"
        }
    }

    public struct ListCloudWatchAlarmTemplateGroupsRequest: AWSEncodableShape {
        public let maxResults: Int?
        /// A token used to retrieve the next set of results in paginated list responses.
        public let nextToken: String?
        /// Represents the scope of a resource, with options for all scopes, AWS provided resources, or local resources.
        public let scope: String?
        /// A signal map's identifier. Can be either be its id or current name.
        public let signalMapIdentifier: String?

        @inlinable
        public init(maxResults: Int? = nil, nextToken: String? = nil, scope: String? = nil, signalMapIdentifier: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.scope = scope
            self.signalMapIdentifier = signalMapIdentifier
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodeQuery(self.maxResults, key: "maxResults")
            request.encodeQuery(self.nextToken, key: "nextToken")
            request.encodeQuery(self.scope, key: "scope")
            request.encodeQuery(self.signalMapIdentifier, key: "signalMapIdentifier")
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListCloudWatchAlarmTemplateGroupsResponse: AWSDecodableShape {
        public let cloudWatchAlarmTemplateGroups: [CloudWatchAlarmTemplateGroupSummary]?
        /// A token used to retrieve the next set of results in paginated list responses.
        public let nextToken: String?

        @inlinable
        public init(cloudWatchAlarmTemplateGroups: [CloudWatchAlarmTemplateGroupSummary]? = nil, nextToken: String? = nil) {
            self.cloudWatchAlarmTemplateGroups = cloudWatchAlarmTemplateGroups
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case cloudWatchAlarmTemplateGroups = "cloudWatchAlarmTemplateGroups"
            case nextToken = "nextToken"
        }
    }

    public struct ListCloudWatchAlarmTemplatesRequest: AWSEncodableShape {
        /// A cloudwatch alarm template group's identifier. Can be either be its id or current name.
        public let groupIdentifier: String?
        public let maxResults: Int?
        /// A token used to retrieve the next set of results in paginated list responses.
        public let nextToken: String?
        /// Represents the scope of a resource, with options for all scopes, AWS provided resources, or local resources.
        public let scope: String?
        /// A signal map's identifier. Can be either be its id or current name.
        public let signalMapIdentifier: String?

        @inlinable
        public init(groupIdentifier: String? = nil, maxResults: Int? = nil, nextToken: String? = nil, scope: String? = nil, signalMapIdentifier: String? = nil) {
            self.groupIdentifier = groupIdentifier
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.scope = scope
            self.signalMapIdentifier = signalMapIdentifier
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodeQuery(self.groupIdentifier, key: "groupIdentifier")
            request.encodeQuery(self.maxResults, key: "maxResults")
            request.encodeQuery(self.nextToken, key: "nextToken")
            request.encodeQuery(self.scope, key: "scope")
            request.encodeQuery(self.signalMapIdentifier, key: "signalMapIdentifier")
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListCloudWatchAlarmTemplatesResponse: AWSDecodableShape {
        public let cloudWatchAlarmTemplates: [CloudWatchAlarmTemplateSummary]?
        /// A token used to retrieve the next set of results in paginated list responses.
        public let nextToken: String?

        @inlinable
        public init(cloudWatchAlarmTemplates: [CloudWatchAlarmTemplateSummary]? = nil, nextToken: String? = nil) {
            self.cloudWatchAlarmTemplates = cloudWatchAlarmTemplates
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case cloudWatchAlarmTemplates = "cloudWatchAlarmTemplates"
            case nextToken = "nextToken"
        }
    }

    public struct ListClustersRequest: AWSEncodableShape {
        /// The maximum number of items to return.
        public let maxResults: Int?
        /// The token to retrieve the next page of results.
        public let nextToken: String?

        @inlinable
        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodeQuery(self.maxResults, key: "maxResults")
            request.encodeQuery(self.nextToken, key: "nextToken")
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListClustersResponse: AWSDecodableShape {
        /// A list of the Clusters that exist in your AWS account.
        public let clusters: [DescribeClusterSummary]?
        /// Token for the next result.
        public let nextToken: String?

        @inlinable
        public init(clusters: [DescribeClusterSummary]? = nil, nextToken: String? = nil) {
            self.clusters = clusters
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case clusters = "clusters"
            case nextToken = "nextToken"
        }
    }

    public struct ListEventBridgeRuleTemplateGroupsRequest: AWSEncodableShape {
        public let maxResults: Int?
        /// A token used to retrieve the next set of results in paginated list responses.
        public let nextToken: String?
        /// A signal map's identifier. Can be either be its id or current name.
        public let signalMapIdentifier: String?

        @inlinable
        public init(maxResults: Int? = nil, nextToken: String? = nil, signalMapIdentifier: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.signalMapIdentifier = signalMapIdentifier
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodeQuery(self.maxResults, key: "maxResults")
            request.encodeQuery(self.nextToken, key: "nextToken")
            request.encodeQuery(self.signalMapIdentifier, key: "signalMapIdentifier")
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListEventBridgeRuleTemplateGroupsResponse: AWSDecodableShape {
        public let eventBridgeRuleTemplateGroups: [EventBridgeRuleTemplateGroupSummary]?
        /// A token used to retrieve the next set of results in paginated list responses.
        public let nextToken: String?

        @inlinable
        public init(eventBridgeRuleTemplateGroups: [EventBridgeRuleTemplateGroupSummary]? = nil, nextToken: String? = nil) {
            self.eventBridgeRuleTemplateGroups = eventBridgeRuleTemplateGroups
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case eventBridgeRuleTemplateGroups = "eventBridgeRuleTemplateGroups"
            case nextToken = "nextToken"
        }
    }

    public struct ListEventBridgeRuleTemplatesRequest: AWSEncodableShape {
        /// An eventbridge rule template group's identifier. Can be either be its id or current name.
        public let groupIdentifier: String?
        public let maxResults: Int?
        /// A token used to retrieve the next set of results in paginated list responses.
        public let nextToken: String?
        /// A signal map's identifier. Can be either be its id or current name.
        public let signalMapIdentifier: String?

        @inlinable
        public init(groupIdentifier: String? = nil, maxResults: Int? = nil, nextToken: String? = nil, signalMapIdentifier: String? = nil) {
            self.groupIdentifier = groupIdentifier
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.signalMapIdentifier = signalMapIdentifier
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodeQuery(self.groupIdentifier, key: "groupIdentifier")
            request.encodeQuery(self.maxResults, key: "maxResults")
            request.encodeQuery(self.nextToken, key: "nextToken")
            request.encodeQuery(self.signalMapIdentifier, key: "signalMapIdentifier")
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListEventBridgeRuleTemplatesResponse: AWSDecodableShape {
        public let eventBridgeRuleTemplates: [EventBridgeRuleTemplateSummary]?
        /// A token used to retrieve the next set of results in paginated list responses.
        public let nextToken: String?

        @inlinable
        public init(eventBridgeRuleTemplates: [EventBridgeRuleTemplateSummary]? = nil, nextToken: String? = nil) {
            self.eventBridgeRuleTemplates = eventBridgeRuleTemplates
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case eventBridgeRuleTemplates = "eventBridgeRuleTemplates"
            case nextToken = "nextToken"
        }
    }

    public struct ListInputDeviceTransfersRequest: AWSEncodableShape {
        public let maxResults: Int?
        public let nextToken: String?
        public let transferType: String?

        @inlinable
        public init(maxResults: Int? = nil, nextToken: String? = nil, transferType: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.transferType = transferType
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodeQuery(self.maxResults, key: "maxResults")
            request.encodeQuery(self.nextToken, key: "nextToken")
            request.encodeQuery(self.transferType, key: "transferType")
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListInputDeviceTransfersResponse: AWSDecodableShape {
        /// The list of devices that you are transferring or are being transferred to you.
        public let inputDeviceTransfers: [TransferringInputDeviceSummary]?
        /// A token to get additional list results.
        public let nextToken: String?

        @inlinable
        public init(inputDeviceTransfers: [TransferringInputDeviceSummary]? = nil, nextToken: String? = nil) {
            self.inputDeviceTransfers = inputDeviceTransfers
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case inputDeviceTransfers = "inputDeviceTransfers"
            case nextToken = "nextToken"
        }
    }

    public struct ListInputDevicesRequest: AWSEncodableShape {
        public let maxResults: Int?
        public let nextToken: String?

        @inlinable
        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodeQuery(self.maxResults, key: "maxResults")
            request.encodeQuery(self.nextToken, key: "nextToken")
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListInputDevicesResponse: AWSDecodableShape {
        /// The list of input devices.
        public let inputDevices: [InputDeviceSummary]?
        /// A token to get additional list results.
        public let nextToken: String?

        @inlinable
        public init(inputDevices: [InputDeviceSummary]? = nil, nextToken: String? = nil) {
            self.inputDevices = inputDevices
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case inputDevices = "inputDevices"
            case nextToken = "nextToken"
        }
    }

    public struct ListInputSecurityGroupsRequest: AWSEncodableShape {
        public let maxResults: Int?
        public let nextToken: String?

        @inlinable
        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodeQuery(self.maxResults, key: "maxResults")
            request.encodeQuery(self.nextToken, key: "nextToken")
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListInputSecurityGroupsResponse: AWSDecodableShape {
        /// List of input security groups
        public let inputSecurityGroups: [InputSecurityGroup]?
        public let nextToken: String?

        @inlinable
        public init(inputSecurityGroups: [InputSecurityGroup]? = nil, nextToken: String? = nil) {
            self.inputSecurityGroups = inputSecurityGroups
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case inputSecurityGroups = "inputSecurityGroups"
            case nextToken = "nextToken"
        }
    }

    public struct ListInputsRequest: AWSEncodableShape {
        public let maxResults: Int?
        public let nextToken: String?

        @inlinable
        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodeQuery(self.maxResults, key: "maxResults")
            request.encodeQuery(self.nextToken, key: "nextToken")
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListInputsResponse: AWSDecodableShape {
        public let inputs: [Input]?
        public let nextToken: String?

        @inlinable
        public init(inputs: [Input]? = nil, nextToken: String? = nil) {
            self.inputs = inputs
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case inputs = "inputs"
            case nextToken = "nextToken"
        }
    }

    public struct ListMultiplexProgramsRequest: AWSEncodableShape {
        /// The maximum number of items to return.
        public let maxResults: Int?
        /// The ID of the multiplex that the programs belong to.
        public let multiplexId: String
        /// The token to retrieve the next page of results.
        public let nextToken: String?

        @inlinable
        public init(maxResults: Int? = nil, multiplexId: String, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.multiplexId = multiplexId
            self.nextToken = nextToken
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodeQuery(self.maxResults, key: "maxResults")
            request.encodePath(self.multiplexId, key: "MultiplexId")
            request.encodeQuery(self.nextToken, key: "nextToken")
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListMultiplexProgramsResponse: AWSDecodableShape {
        /// List of multiplex programs.
        public let multiplexPrograms: [MultiplexProgramSummary]?
        /// Token for the next ListMultiplexProgram request.
        public let nextToken: String?

        @inlinable
        public init(multiplexPrograms: [MultiplexProgramSummary]? = nil, nextToken: String? = nil) {
            self.multiplexPrograms = multiplexPrograms
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case multiplexPrograms = "multiplexPrograms"
            case nextToken = "nextToken"
        }
    }

    public struct ListMultiplexesRequest: AWSEncodableShape {
        /// The maximum number of items to return.
        public let maxResults: Int?
        /// The token to retrieve the next page of results.
        public let nextToken: String?

        @inlinable
        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodeQuery(self.maxResults, key: "maxResults")
            request.encodeQuery(self.nextToken, key: "nextToken")
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListMultiplexesResponse: AWSDecodableShape {
        /// List of multiplexes.
        public let multiplexes: [MultiplexSummary]?
        /// Token for the next ListMultiplexes request.
        public let nextToken: String?

        @inlinable
        public init(multiplexes: [MultiplexSummary]? = nil, nextToken: String? = nil) {
            self.multiplexes = multiplexes
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case multiplexes = "multiplexes"
            case nextToken = "nextToken"
        }
    }

    public struct ListNetworksRequest: AWSEncodableShape {
        /// The maximum number of items to return.
        public let maxResults: Int?
        /// The token to retrieve the next page of results.
        public let nextToken: String?

        @inlinable
        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodeQuery(self.maxResults, key: "maxResults")
            request.encodeQuery(self.nextToken, key: "nextToken")
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListNetworksResponse: AWSDecodableShape {
        /// An array of networks that you have created.
        public let networks: [DescribeNetworkSummary]?
        /// Token for the next ListNetworks request.
        public let nextToken: String?

        @inlinable
        public init(networks: [DescribeNetworkSummary]? = nil, nextToken: String? = nil) {
            self.networks = networks
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case networks = "networks"
            case nextToken = "nextToken"
        }
    }

    public struct ListNodesRequest: AWSEncodableShape {
        /// The ID of the cluster
        public let clusterId: String
        /// The maximum number of items to return.
        public let maxResults: Int?
        /// The token to retrieve the next page of results.
        public let nextToken: String?

        @inlinable
        public init(clusterId: String, maxResults: Int? = nil, nextToken: String? = nil) {
            self.clusterId = clusterId
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.clusterId, key: "ClusterId")
            request.encodeQuery(self.maxResults, key: "maxResults")
            request.encodeQuery(self.nextToken, key: "nextToken")
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListNodesResponse: AWSDecodableShape {
        /// Token for the next result.
        public let nextToken: String?
        /// An array of Nodes that exist in the Cluster.
        public let nodes: [DescribeNodeSummary]?

        @inlinable
        public init(nextToken: String? = nil, nodes: [DescribeNodeSummary]? = nil) {
            self.nextToken = nextToken
            self.nodes = nodes
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "nextToken"
            case nodes = "nodes"
        }
    }

    public struct ListOfferingsRequest: AWSEncodableShape {
        /// Filter by channel class, 'STANDARD' or 'SINGLE_PIPELINE'
        public let channelClass: String?
        /// Filter to offerings that match the configuration of an existing channel, e.g. '2345678' (a channel ID)
        public let channelConfiguration: String?
        /// Filter by codec, 'AVC', 'HEVC', 'MPEG2', 'AUDIO', 'LINK', or 'AV1'
        public let codec: String?
        /// Filter by offering duration, e.g. '12'
        public let duration: String?
        /// Filter by bitrate, 'MAX_10_MBPS', 'MAX_20_MBPS', or 'MAX_50_MBPS'
        public let maximumBitrate: String?
        /// Filter by framerate, 'MAX_30_FPS' or 'MAX_60_FPS'
        public let maximumFramerate: String?
        public let maxResults: Int?
        public let nextToken: String?
        /// Filter by resolution, 'SD', 'HD', 'FHD', or 'UHD'
        public let resolution: String?
        /// Filter by resource type, 'INPUT', 'OUTPUT', 'MULTIPLEX', or 'CHANNEL'
        public let resourceType: String?
        /// Filter by special feature, 'ADVANCED_AUDIO' or 'AUDIO_NORMALIZATION'
        public let specialFeature: String?
        /// Filter by video quality, 'STANDARD', 'ENHANCED', or 'PREMIUM'
        public let videoQuality: String?

        @inlinable
        public init(channelClass: String? = nil, channelConfiguration: String? = nil, codec: String? = nil, duration: String? = nil, maximumBitrate: String? = nil, maximumFramerate: String? = nil, maxResults: Int? = nil, nextToken: String? = nil, resolution: String? = nil, resourceType: String? = nil, specialFeature: String? = nil, videoQuality: String? = nil) {
            self.channelClass = channelClass
            self.channelConfiguration = channelConfiguration
            self.codec = codec
            self.duration = duration
            self.maximumBitrate = maximumBitrate
            self.maximumFramerate = maximumFramerate
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.resolution = resolution
            self.resourceType = resourceType
            self.specialFeature = specialFeature
            self.videoQuality = videoQuality
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodeQuery(self.channelClass, key: "channelClass")
            request.encodeQuery(self.channelConfiguration, key: "channelConfiguration")
            request.encodeQuery(self.codec, key: "codec")
            request.encodeQuery(self.duration, key: "duration")
            request.encodeQuery(self.maximumBitrate, key: "maximumBitrate")
            request.encodeQuery(self.maximumFramerate, key: "maximumFramerate")
            request.encodeQuery(self.maxResults, key: "maxResults")
            request.encodeQuery(self.nextToken, key: "nextToken")
            request.encodeQuery(self.resolution, key: "resolution")
            request.encodeQuery(self.resourceType, key: "resourceType")
            request.encodeQuery(self.specialFeature, key: "specialFeature")
            request.encodeQuery(self.videoQuality, key: "videoQuality")
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListOfferingsResponse: AWSDecodableShape {
        /// Token to retrieve the next page of results
        public let nextToken: String?
        /// List of offerings
        public let offerings: [Offering]?

        @inlinable
        public init(nextToken: String? = nil, offerings: [Offering]? = nil) {
            self.nextToken = nextToken
            self.offerings = offerings
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "nextToken"
            case offerings = "offerings"
        }
    }

    public struct ListReservationsRequest: AWSEncodableShape {
        /// Filter by channel class, 'STANDARD' or 'SINGLE_PIPELINE'
        public let channelClass: String?
        /// Filter by codec, 'AVC', 'HEVC', 'MPEG2', 'AUDIO', 'LINK', or 'AV1'
        public let codec: String?
        /// Filter by bitrate, 'MAX_10_MBPS', 'MAX_20_MBPS', or 'MAX_50_MBPS'
        public let maximumBitrate: String?
        /// Filter by framerate, 'MAX_30_FPS' or 'MAX_60_FPS'
        public let maximumFramerate: String?
        public let maxResults: Int?
        public let nextToken: String?
        /// Filter by resolution, 'SD', 'HD', 'FHD', or 'UHD'
        public let resolution: String?
        /// Filter by resource type, 'INPUT', 'OUTPUT', 'MULTIPLEX', or 'CHANNEL'
        public let resourceType: String?
        /// Filter by special feature, 'ADVANCED_AUDIO' or 'AUDIO_NORMALIZATION'
        public let specialFeature: String?
        /// Filter by video quality, 'STANDARD', 'ENHANCED', or 'PREMIUM'
        public let videoQuality: String?

        @inlinable
        public init(channelClass: String? = nil, codec: String? = nil, maximumBitrate: String? = nil, maximumFramerate: String? = nil, maxResults: Int? = nil, nextToken: String? = nil, resolution: String? = nil, resourceType: String? = nil, specialFeature: String? = nil, videoQuality: String? = nil) {
            self.channelClass = channelClass
            self.codec = codec
            self.maximumBitrate = maximumBitrate
            self.maximumFramerate = maximumFramerate
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.resolution = resolution
            self.resourceType = resourceType
            self.specialFeature = specialFeature
            self.videoQuality = videoQuality
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodeQuery(self.channelClass, key: "channelClass")
            request.encodeQuery(self.codec, key: "codec")
            request.encodeQuery(self.maximumBitrate, key: "maximumBitrate")
            request.encodeQuery(self.maximumFramerate, key: "maximumFramerate")
            request.encodeQuery(self.maxResults, key: "maxResults")
            request.encodeQuery(self.nextToken, key: "nextToken")
            request.encodeQuery(self.resolution, key: "resolution")
            request.encodeQuery(self.resourceType, key: "resourceType")
            request.encodeQuery(self.specialFeature, key: "specialFeature")
            request.encodeQuery(self.videoQuality, key: "videoQuality")
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListReservationsResponse: AWSDecodableShape {
        /// Token to retrieve the next page of results
        public let nextToken: String?
        /// List of reservations
        public let reservations: [Reservation]?

        @inlinable
        public init(nextToken: String? = nil, reservations: [Reservation]? = nil) {
            self.nextToken = nextToken
            self.reservations = reservations
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "nextToken"
            case reservations = "reservations"
        }
    }

    public struct ListSdiSourcesRequest: AWSEncodableShape {
        /// The maximum number of items to return.
        public let maxResults: Int?
        /// The token to retrieve the next page of results.
        public let nextToken: String?

        @inlinable
        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodeQuery(self.maxResults, key: "maxResults")
            request.encodeQuery(self.nextToken, key: "nextToken")
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListSdiSourcesResponse: AWSDecodableShape {
        public let nextToken: String?
        public let sdiSources: [SdiSourceSummary]?

        @inlinable
        public init(nextToken: String? = nil, sdiSources: [SdiSourceSummary]? = nil) {
            self.nextToken = nextToken
            self.sdiSources = sdiSources
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "nextToken"
            case sdiSources = "sdiSources"
        }
    }

    public struct ListSignalMapsRequest: AWSEncodableShape {
        /// A cloudwatch alarm template group's identifier. Can be either be its id or current name.
        public let cloudWatchAlarmTemplateGroupIdentifier: String?
        /// An eventbridge rule template group's identifier. Can be either be its id or current name.
        public let eventBridgeRuleTemplateGroupIdentifier: String?
        public let maxResults: Int?
        /// A token used to retrieve the next set of results in paginated list responses.
        public let nextToken: String?

        @inlinable
        public init(cloudWatchAlarmTemplateGroupIdentifier: String? = nil, eventBridgeRuleTemplateGroupIdentifier: String? = nil, maxResults: Int? = nil, nextToken: String? = nil) {
            self.cloudWatchAlarmTemplateGroupIdentifier = cloudWatchAlarmTemplateGroupIdentifier
            self.eventBridgeRuleTemplateGroupIdentifier = eventBridgeRuleTemplateGroupIdentifier
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodeQuery(self.cloudWatchAlarmTemplateGroupIdentifier, key: "cloudWatchAlarmTemplateGroupIdentifier")
            request.encodeQuery(self.eventBridgeRuleTemplateGroupIdentifier, key: "eventBridgeRuleTemplateGroupIdentifier")
            request.encodeQuery(self.maxResults, key: "maxResults")
            request.encodeQuery(self.nextToken, key: "nextToken")
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 1000)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListSignalMapsResponse: AWSDecodableShape {
        /// A token used to retrieve the next set of results in paginated list responses.
        public let nextToken: String?
        public let signalMaps: [SignalMapSummary]?

        @inlinable
        public init(nextToken: String? = nil, signalMaps: [SignalMapSummary]? = nil) {
            self.nextToken = nextToken
            self.signalMaps = signalMaps
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "nextToken"
            case signalMaps = "signalMaps"
        }
    }

    public struct ListTagsForResourceRequest: AWSEncodableShape {
        public let resourceArn: String

        @inlinable
        public init(resourceArn: String) {
            self.resourceArn = resourceArn
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.resourceArn, key: "ResourceArn")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListTagsForResourceResponse: AWSDecodableShape {
        public let tags: [String: String]?

        @inlinable
        public init(tags: [String: String]? = nil) {
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case tags = "tags"
        }
    }

    public struct ListVersionsRequest: AWSEncodableShape {
        public init() {}
    }

    public struct ListVersionsResponse: AWSDecodableShape {
        /// List of engine versions that are available for this AWS account.
        public let versions: [ChannelEngineVersionResponse]?

        @inlinable
        public init(versions: [ChannelEngineVersionResponse]? = nil) {
            self.versions = versions
        }

        private enum CodingKeys: String, CodingKey {
            case versions = "versions"
        }
    }

    public struct M2tsSettings: AWSEncodableShape & AWSDecodableShape {
        /// When set to drop, output audio streams will be removed from the program if the selected input audio stream is removed from the input. This allows the output audio configuration to dynamically change based on input configuration. If this is set to encodeSilence, all output audio streams will output encoded silence when not connected to an active input stream.
        public let absentInputAudioBehavior: M2tsAbsentInputAudioBehavior?
        /// When set to enabled, uses ARIB-compliant field muxing and removes video descriptor.
        public let arib: M2tsArib?
        /// Packet Identifier (PID) for ARIB Captions in the transport stream. Can be entered as a decimal or hexadecimal value.  Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
        public let aribCaptionsPid: String?
        /// If set to auto, pid number used for ARIB Captions will be auto-selected from unused pids.  If set to useConfigured, ARIB Captions will be on the configured pid number.
        public let aribCaptionsPidControl: M2tsAribCaptionsPidControl?
        /// When set to dvb, uses DVB buffer model for Dolby Digital audio.  When set to atsc, the ATSC model is used.
        public let audioBufferModel: M2tsAudioBufferModel?
        /// The number of audio frames to insert for each PES packet.
        public let audioFramesPerPes: Int?
        /// Packet Identifier (PID) of the elementary audio stream(s) in the transport stream. Multiple values are accepted, and can be entered in ranges and/or by comma separation. Can be entered as decimal or hexadecimal values. Each PID specified must be in the range of 32 (or 0x20)..8182 (or 0x1ff6).
        public let audioPids: String?
        /// When set to atsc, uses stream type = 0x81 for AC3 and stream type = 0x87 for EAC3. When set to dvb, uses stream type = 0x06.
        public let audioStreamType: M2tsAudioStreamType?
        /// The output bitrate of the transport stream in bits per second. Setting to 0 lets the muxer automatically determine the appropriate bitrate.
        public let bitrate: Int?
        /// Controls the timing accuracy for output network traffic. Leave as MULTIPLEX to ensure accurate network packet timing. Or set to NONE, which might result in lower latency but will result in more variability in output network packet timing. This variability might cause interruptions, jitter, or bursty behavior in your playback or receiving devices.
        public let bufferModel: M2tsBufferModel?
        /// When set to enabled, generates captionServiceDescriptor in PMT.
        public let ccDescriptor: M2tsCcDescriptor?
        /// Inserts DVB Network Information Table (NIT) at the specified table repetition interval.
        public let dvbNitSettings: DvbNitSettings?
        /// Inserts DVB Service Description Table (SDT) at the specified table repetition interval.
        public let dvbSdtSettings: DvbSdtSettings?
        /// Packet Identifier (PID) for input source DVB Subtitle data to this output. Multiple values are accepted, and can be entered in ranges and/or by comma separation. Can be entered as decimal or hexadecimal values.  Each PID specified must be in the range of 32 (or 0x20)..8182 (or 0x1ff6).
        public let dvbSubPids: String?
        /// Inserts DVB Time and Date Table (TDT) at the specified table repetition interval.
        public let dvbTdtSettings: DvbTdtSettings?
        /// Packet Identifier (PID) for input source DVB Teletext data to this output. Can be entered as a decimal or hexadecimal value.  Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
        public let dvbTeletextPid: String?
        /// If set to passthrough, passes any EBIF data from the input source to this output.
        public let ebif: M2tsEbifControl?
        /// When videoAndFixedIntervals is selected, audio EBP markers will be added to partitions 3 and 4. The interval between these additional markers will be fixed, and will be slightly shorter than the video EBP marker interval. Only available when EBP Cablelabs segmentation markers are selected.  Partitions 1 and 2 will always follow the video interval.
        public let ebpAudioInterval: M2tsAudioInterval?
        /// When set, enforces that Encoder Boundary Points do not come within the specified time interval of each other by looking ahead at input video. If another EBP is going to come in within the specified time interval, the current EBP is not emitted, and the segment is "stretched" to the next marker.  The lookahead value does not add latency to the system. The Live Event must be configured elsewhere to create sufficient latency to make the lookahead accurate.
        public let ebpLookaheadMs: Int?
        /// Controls placement of EBP on Audio PIDs. If set to videoAndAudioPids, EBP markers will be placed on the video PID and all audio PIDs.  If set to videoPid, EBP markers will be placed on only the video PID.
        public let ebpPlacement: M2tsEbpPlacement?
        /// This field is unused and deprecated.
        public let ecmPid: String?
        /// Include or exclude the ES Rate field in the PES header.
        public let esRateInPes: M2tsEsRateInPes?
        /// Packet Identifier (PID) for input source ETV Platform data to this output. Can be entered as a decimal or hexadecimal value.  Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
        public let etvPlatformPid: String?
        /// Packet Identifier (PID) for input source ETV Signal data to this output. Can be entered as a decimal or hexadecimal value.  Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
        public let etvSignalPid: String?
        /// The length in seconds of each fragment. Only used with EBP markers.
        public let fragmentTime: Double?
        /// If set to passthrough, passes any KLV data from the input source to this output.
        public let klv: M2tsKlv?
        /// Packet Identifier (PID) for input source KLV data to this output. Multiple values are accepted, and can be entered in ranges and/or by comma separation. Can be entered as decimal or hexadecimal values.  Each PID specified must be in the range of 32 (or 0x20)..8182 (or 0x1ff6).
        public let klvDataPids: String?
        /// If set to passthrough, Nielsen inaudible tones for media tracking will be detected in the input audio and an equivalent ID3 tag will be inserted in the output.
        public let nielsenId3Behavior: M2tsNielsenId3Behavior?
        /// Value in bits per second of extra null packets to insert into the transport stream. This can be used if a downstream encryption system requires periodic null packets.
        public let nullPacketBitrate: Double?
        /// The number of milliseconds between instances of this table in the output transport stream.  Valid values are 0, 10..1000.
        public let patInterval: Int?
        /// When set to pcrEveryPesPacket, a Program Clock Reference value is inserted for every Packetized Elementary Stream (PES) header. This parameter is effective only when the PCR PID is the same as the video or audio elementary stream.
        public let pcrControl: M2tsPcrControl?
        /// Maximum time in milliseconds between Program Clock Reference (PCRs) inserted into the transport stream.
        public let pcrPeriod: Int?
        /// Packet Identifier (PID) of the Program Clock Reference (PCR) in the transport stream. When no value is given, the encoder will assign the same value as the Video PID. Can be entered as a decimal or hexadecimal value.  Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
        public let pcrPid: String?
        /// The number of milliseconds between instances of this table in the output transport stream. Valid values are 0, 10..1000.
        public let pmtInterval: Int?
        /// Packet Identifier (PID) for the Program Map Table (PMT) in the transport stream. Can be entered as a decimal or hexadecimal value. Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
        public let pmtPid: String?
        /// The value of the program number field in the Program Map Table.
        public let programNum: Int?
        /// When vbr, does not insert null packets into transport stream to fill specified bitrate. The bitrate setting acts as the maximum bitrate when vbr is set.
        public let rateMode: M2tsRateMode?
        /// Packet Identifier (PID) for input source SCTE-27 data to this output. Multiple values are accepted, and can be entered in ranges and/or by comma separation. Can be entered as decimal or hexadecimal values.  Each PID specified must be in the range of 32 (or 0x20)..8182 (or 0x1ff6).
        public let scte27Pids: String?
        /// Optionally pass SCTE-35 signals from the input source to this output.
        public let scte35Control: M2tsScte35Control?
        /// Packet Identifier (PID) of the SCTE-35 stream in the transport stream. Can be entered as a decimal or hexadecimal value.  Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
        public let scte35Pid: String?
        /// Defines the amount SCTE-35 preroll will be increased (in milliseconds) on the output. Preroll is the amount of time between the presence of a SCTE-35 indication in a transport stream and the PTS of the video frame it references. Zero means don't add pullup (it doesn't mean set the preroll to zero). Negative pullup is not supported, which means that you can't make the preroll shorter. Be aware that latency in the output will increase by the pullup amount.
        public let scte35PrerollPullupMilliseconds: Double?
        /// Inserts segmentation markers at each segmentationTime period. raiSegstart sets the Random Access Indicator bit in the adaptation field. raiAdapt sets the RAI bit and adds the current timecode in the private data bytes. psiSegstart inserts PAT and PMT tables at the start of segments. ebp adds Encoder Boundary Point information to the adaptation field as per OpenCable specification OC-SP-EBP-I01-130118. ebpLegacy adds Encoder Boundary Point information to the adaptation field using a legacy proprietary format.
        public let segmentationMarkers: M2tsSegmentationMarkers?
        /// The segmentation style parameter controls how segmentation markers are inserted into the transport stream. With avails, it is possible that segments may be truncated, which can influence where future segmentation markers are inserted.
        /// When a segmentation style of "resetCadence" is selected and a segment is truncated due to an avail, we will reset the segmentation cadence. This means the subsequent segment will have a duration of $segmentationTime seconds.
        /// When a segmentation style of "maintainCadence" is selected and a segment is truncated due to an avail, we will not reset the segmentation cadence. This means the subsequent segment will likely be truncated as well. However, all segments after that will have a duration of $segmentationTime seconds. Note that EBP lookahead is a slight exception to this rule.
        public let segmentationStyle: M2tsSegmentationStyle?
        /// The length in seconds of each segment. Required unless markers is set to _none_.
        public let segmentationTime: Double?
        /// When set to passthrough, timed metadata will be passed through from input to output.
        public let timedMetadataBehavior: M2tsTimedMetadataBehavior?
        /// Packet Identifier (PID) of the timed metadata stream in the transport stream. Can be entered as a decimal or hexadecimal value.  Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
        public let timedMetadataPid: String?
        /// The value of the transport stream ID field in the Program Map Table.
        public let transportStreamId: Int?
        /// Packet Identifier (PID) of the elementary video stream in the transport stream. Can be entered as a decimal or hexadecimal value.  Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
        public let videoPid: String?

        @inlinable
        public init(absentInputAudioBehavior: M2tsAbsentInputAudioBehavior? = nil, arib: M2tsArib? = nil, aribCaptionsPid: String? = nil, aribCaptionsPidControl: M2tsAribCaptionsPidControl? = nil, audioBufferModel: M2tsAudioBufferModel? = nil, audioFramesPerPes: Int? = nil, audioPids: String? = nil, audioStreamType: M2tsAudioStreamType? = nil, bitrate: Int? = nil, bufferModel: M2tsBufferModel? = nil, ccDescriptor: M2tsCcDescriptor? = nil, dvbNitSettings: DvbNitSettings? = nil, dvbSdtSettings: DvbSdtSettings? = nil, dvbSubPids: String? = nil, dvbTdtSettings: DvbTdtSettings? = nil, dvbTeletextPid: String? = nil, ebif: M2tsEbifControl? = nil, ebpAudioInterval: M2tsAudioInterval? = nil, ebpLookaheadMs: Int? = nil, ebpPlacement: M2tsEbpPlacement? = nil, ecmPid: String? = nil, esRateInPes: M2tsEsRateInPes? = nil, etvPlatformPid: String? = nil, etvSignalPid: String? = nil, fragmentTime: Double? = nil, klv: M2tsKlv? = nil, klvDataPids: String? = nil, nielsenId3Behavior: M2tsNielsenId3Behavior? = nil, nullPacketBitrate: Double? = nil, patInterval: Int? = nil, pcrControl: M2tsPcrControl? = nil, pcrPeriod: Int? = nil, pcrPid: String? = nil, pmtInterval: Int? = nil, pmtPid: String? = nil, programNum: Int? = nil, rateMode: M2tsRateMode? = nil, scte27Pids: String? = nil, scte35Control: M2tsScte35Control? = nil, scte35Pid: String? = nil, scte35PrerollPullupMilliseconds: Double? = nil, segmentationMarkers: M2tsSegmentationMarkers? = nil, segmentationStyle: M2tsSegmentationStyle? = nil, segmentationTime: Double? = nil, timedMetadataBehavior: M2tsTimedMetadataBehavior? = nil, timedMetadataPid: String? = nil, transportStreamId: Int? = nil, videoPid: String? = nil) {
            self.absentInputAudioBehavior = absentInputAudioBehavior
            self.arib = arib
            self.aribCaptionsPid = aribCaptionsPid
            self.aribCaptionsPidControl = aribCaptionsPidControl
            self.audioBufferModel = audioBufferModel
            self.audioFramesPerPes = audioFramesPerPes
            self.audioPids = audioPids
            self.audioStreamType = audioStreamType
            self.bitrate = bitrate
            self.bufferModel = bufferModel
            self.ccDescriptor = ccDescriptor
            self.dvbNitSettings = dvbNitSettings
            self.dvbSdtSettings = dvbSdtSettings
            self.dvbSubPids = dvbSubPids
            self.dvbTdtSettings = dvbTdtSettings
            self.dvbTeletextPid = dvbTeletextPid
            self.ebif = ebif
            self.ebpAudioInterval = ebpAudioInterval
            self.ebpLookaheadMs = ebpLookaheadMs
            self.ebpPlacement = ebpPlacement
            self.ecmPid = ecmPid
            self.esRateInPes = esRateInPes
            self.etvPlatformPid = etvPlatformPid
            self.etvSignalPid = etvSignalPid
            self.fragmentTime = fragmentTime
            self.klv = klv
            self.klvDataPids = klvDataPids
            self.nielsenId3Behavior = nielsenId3Behavior
            self.nullPacketBitrate = nullPacketBitrate
            self.patInterval = patInterval
            self.pcrControl = pcrControl
            self.pcrPeriod = pcrPeriod
            self.pcrPid = pcrPid
            self.pmtInterval = pmtInterval
            self.pmtPid = pmtPid
            self.programNum = programNum
            self.rateMode = rateMode
            self.scte27Pids = scte27Pids
            self.scte35Control = scte35Control
            self.scte35Pid = scte35Pid
            self.scte35PrerollPullupMilliseconds = scte35PrerollPullupMilliseconds
            self.segmentationMarkers = segmentationMarkers
            self.segmentationStyle = segmentationStyle
            self.segmentationTime = segmentationTime
            self.timedMetadataBehavior = timedMetadataBehavior
            self.timedMetadataPid = timedMetadataPid
            self.transportStreamId = transportStreamId
            self.videoPid = videoPid
        }

        public func validate(name: String) throws {
            try self.validate(self.audioFramesPerPes, name: "audioFramesPerPes", parent: name, min: 0)
            try self.validate(self.bitrate, name: "bitrate", parent: name, min: 0)
            try self.dvbNitSettings?.validate(name: "\(name).dvbNitSettings")
            try self.dvbSdtSettings?.validate(name: "\(name).dvbSdtSettings")
            try self.dvbTdtSettings?.validate(name: "\(name).dvbTdtSettings")
            try self.validate(self.ebpLookaheadMs, name: "ebpLookaheadMs", parent: name, max: 10000)
            try self.validate(self.ebpLookaheadMs, name: "ebpLookaheadMs", parent: name, min: 0)
            try self.validate(self.patInterval, name: "patInterval", parent: name, max: 1000)
            try self.validate(self.patInterval, name: "patInterval", parent: name, min: 0)
            try self.validate(self.pcrPeriod, name: "pcrPeriod", parent: name, max: 500)
            try self.validate(self.pcrPeriod, name: "pcrPeriod", parent: name, min: 0)
            try self.validate(self.pmtInterval, name: "pmtInterval", parent: name, max: 1000)
            try self.validate(self.pmtInterval, name: "pmtInterval", parent: name, min: 0)
            try self.validate(self.programNum, name: "programNum", parent: name, max: 65535)
            try self.validate(self.programNum, name: "programNum", parent: name, min: 0)
            try self.validate(self.transportStreamId, name: "transportStreamId", parent: name, max: 65535)
            try self.validate(self.transportStreamId, name: "transportStreamId", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case absentInputAudioBehavior = "absentInputAudioBehavior"
            case arib = "arib"
            case aribCaptionsPid = "aribCaptionsPid"
            case aribCaptionsPidControl = "aribCaptionsPidControl"
            case audioBufferModel = "audioBufferModel"
            case audioFramesPerPes = "audioFramesPerPes"
            case audioPids = "audioPids"
            case audioStreamType = "audioStreamType"
            case bitrate = "bitrate"
            case bufferModel = "bufferModel"
            case ccDescriptor = "ccDescriptor"
            case dvbNitSettings = "dvbNitSettings"
            case dvbSdtSettings = "dvbSdtSettings"
            case dvbSubPids = "dvbSubPids"
            case dvbTdtSettings = "dvbTdtSettings"
            case dvbTeletextPid = "dvbTeletextPid"
            case ebif = "ebif"
            case ebpAudioInterval = "ebpAudioInterval"
            case ebpLookaheadMs = "ebpLookaheadMs"
            case ebpPlacement = "ebpPlacement"
            case ecmPid = "ecmPid"
            case esRateInPes = "esRateInPes"
            case etvPlatformPid = "etvPlatformPid"
            case etvSignalPid = "etvSignalPid"
            case fragmentTime = "fragmentTime"
            case klv = "klv"
            case klvDataPids = "klvDataPids"
            case nielsenId3Behavior = "nielsenId3Behavior"
            case nullPacketBitrate = "nullPacketBitrate"
            case patInterval = "patInterval"
            case pcrControl = "pcrControl"
            case pcrPeriod = "pcrPeriod"
            case pcrPid = "pcrPid"
            case pmtInterval = "pmtInterval"
            case pmtPid = "pmtPid"
            case programNum = "programNum"
            case rateMode = "rateMode"
            case scte27Pids = "scte27Pids"
            case scte35Control = "scte35Control"
            case scte35Pid = "scte35Pid"
            case scte35PrerollPullupMilliseconds = "scte35PrerollPullupMilliseconds"
            case segmentationMarkers = "segmentationMarkers"
            case segmentationStyle = "segmentationStyle"
            case segmentationTime = "segmentationTime"
            case timedMetadataBehavior = "timedMetadataBehavior"
            case timedMetadataPid = "timedMetadataPid"
            case transportStreamId = "transportStreamId"
            case videoPid = "videoPid"
        }
    }

    public struct M3u8Settings: AWSEncodableShape & AWSDecodableShape {
        /// The number of audio frames to insert for each PES packet.
        public let audioFramesPerPes: Int?
        /// Packet Identifier (PID) of the elementary audio stream(s) in the transport stream. Multiple values are accepted, and can be entered in ranges and/or by comma separation. Can be entered as decimal or hexadecimal values.
        public let audioPids: String?
        /// This parameter is unused and deprecated.
        public let ecmPid: String?
        /// If set to passthrough, passes any KLV data from the input source to this output.
        public let klvBehavior: M3u8KlvBehavior?
        /// Packet Identifier (PID) for input source KLV data to this output. Multiple values are accepted, and can be entered in ranges and/or by comma separation. Can be entered as decimal or hexadecimal values.  Each PID specified must be in the range of 32 (or 0x20)..8182 (or 0x1ff6).
        public let klvDataPids: String?
        /// If set to passthrough, Nielsen inaudible tones for media tracking will be detected in the input audio and an equivalent ID3 tag will be inserted in the output.
        public let nielsenId3Behavior: M3u8NielsenId3Behavior?
        /// The number of milliseconds between instances of this table in the output transport stream. A value of \"0\" writes out the PMT once per segment file.
        public let patInterval: Int?
        /// When set to pcrEveryPesPacket, a Program Clock Reference value is inserted for every Packetized Elementary Stream (PES) header. This parameter is effective only when the PCR PID is the same as the video or audio elementary stream.
        public let pcrControl: M3u8PcrControl?
        /// Maximum time in milliseconds between Program Clock References (PCRs) inserted into the transport stream.
        public let pcrPeriod: Int?
        /// Packet Identifier (PID) of the Program Clock Reference (PCR) in the transport stream. When no value is given, the encoder will assign the same value as the Video PID. Can be entered as a decimal or hexadecimal value.
        public let pcrPid: String?
        /// The number of milliseconds between instances of this table in the output transport stream. A value of \"0\" writes out the PMT once per segment file.
        public let pmtInterval: Int?
        /// Packet Identifier (PID) for the Program Map Table (PMT) in the transport stream. Can be entered as a decimal or hexadecimal value.
        public let pmtPid: String?
        /// The value of the program number field in the Program Map Table.
        public let programNum: Int?
        /// If set to passthrough, passes any SCTE-35 signals from the input source to this output.
        public let scte35Behavior: M3u8Scte35Behavior?
        /// Packet Identifier (PID) of the SCTE-35 stream in the transport stream. Can be entered as a decimal or hexadecimal value.
        public let scte35Pid: String?
        /// Set to PASSTHROUGH to enable ID3 metadata insertion. To include metadata, you configure other parameters in the output group or individual outputs, or you add an ID3 action to the channel schedule.
        public let timedMetadataBehavior: M3u8TimedMetadataBehavior?
        /// Packet Identifier (PID) of the timed metadata stream in the transport stream. Can be entered as a decimal or hexadecimal value.  Valid values are 32 (or 0x20)..8182 (or 0x1ff6).
        public let timedMetadataPid: String?
        /// The value of the transport stream ID field in the Program Map Table.
        public let transportStreamId: Int?
        /// Packet Identifier (PID) of the elementary video stream in the transport stream. Can be entered as a decimal or hexadecimal value.
        public let videoPid: String?

        @inlinable
        public init(audioFramesPerPes: Int? = nil, audioPids: String? = nil, ecmPid: String? = nil, klvBehavior: M3u8KlvBehavior? = nil, klvDataPids: String? = nil, nielsenId3Behavior: M3u8NielsenId3Behavior? = nil, patInterval: Int? = nil, pcrControl: M3u8PcrControl? = nil, pcrPeriod: Int? = nil, pcrPid: String? = nil, pmtInterval: Int? = nil, pmtPid: String? = nil, programNum: Int? = nil, scte35Behavior: M3u8Scte35Behavior? = nil, scte35Pid: String? = nil, timedMetadataBehavior: M3u8TimedMetadataBehavior? = nil, timedMetadataPid: String? = nil, transportStreamId: Int? = nil, videoPid: String? = nil) {
            self.audioFramesPerPes = audioFramesPerPes
            self.audioPids = audioPids
            self.ecmPid = ecmPid
            self.klvBehavior = klvBehavior
            self.klvDataPids = klvDataPids
            self.nielsenId3Behavior = nielsenId3Behavior
            self.patInterval = patInterval
            self.pcrControl = pcrControl
            self.pcrPeriod = pcrPeriod
            self.pcrPid = pcrPid
            self.pmtInterval = pmtInterval
            self.pmtPid = pmtPid
            self.programNum = programNum
            self.scte35Behavior = scte35Behavior
            self.scte35Pid = scte35Pid
            self.timedMetadataBehavior = timedMetadataBehavior
            self.timedMetadataPid = timedMetadataPid
            self.transportStreamId = transportStreamId
            self.videoPid = videoPid
        }

        public func validate(name: String) throws {
            try self.validate(self.audioFramesPerPes, name: "audioFramesPerPes", parent: name, min: 0)
            try self.validate(self.patInterval, name: "patInterval", parent: name, max: 1000)
            try self.validate(self.patInterval, name: "patInterval", parent: name, min: 0)
            try self.validate(self.pcrPeriod, name: "pcrPeriod", parent: name, max: 500)
            try self.validate(self.pcrPeriod, name: "pcrPeriod", parent: name, min: 0)
            try self.validate(self.pmtInterval, name: "pmtInterval", parent: name, max: 1000)
            try self.validate(self.pmtInterval, name: "pmtInterval", parent: name, min: 0)
            try self.validate(self.programNum, name: "programNum", parent: name, max: 65535)
            try self.validate(self.programNum, name: "programNum", parent: name, min: 0)
            try self.validate(self.transportStreamId, name: "transportStreamId", parent: name, max: 65535)
            try self.validate(self.transportStreamId, name: "transportStreamId", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case audioFramesPerPes = "audioFramesPerPes"
            case audioPids = "audioPids"
            case ecmPid = "ecmPid"
            case klvBehavior = "klvBehavior"
            case klvDataPids = "klvDataPids"
            case nielsenId3Behavior = "nielsenId3Behavior"
            case patInterval = "patInterval"
            case pcrControl = "pcrControl"
            case pcrPeriod = "pcrPeriod"
            case pcrPid = "pcrPid"
            case pmtInterval = "pmtInterval"
            case pmtPid = "pmtPid"
            case programNum = "programNum"
            case scte35Behavior = "scte35Behavior"
            case scte35Pid = "scte35Pid"
            case timedMetadataBehavior = "timedMetadataBehavior"
            case timedMetadataPid = "timedMetadataPid"
            case transportStreamId = "transportStreamId"
            case videoPid = "videoPid"
        }
    }

    public struct MaintenanceCreateSettings: AWSEncodableShape {
        /// Choose one day of the week for maintenance. The chosen day is used for all future maintenance windows.
        public let maintenanceDay: MaintenanceDay?
        /// Choose the hour that maintenance will start. The chosen time is used for all future maintenance windows.
        public let maintenanceStartTime: String?

        @inlinable
        public init(maintenanceDay: MaintenanceDay? = nil, maintenanceStartTime: String? = nil) {
            self.maintenanceDay = maintenanceDay
            self.maintenanceStartTime = maintenanceStartTime
        }

        public func validate(name: String) throws {
            try self.validate(self.maintenanceStartTime, name: "maintenanceStartTime", parent: name, pattern: "^([0,1]?[0-9]|2[0-3]):00$")
        }

        private enum CodingKeys: String, CodingKey {
            case maintenanceDay = "maintenanceDay"
            case maintenanceStartTime = "maintenanceStartTime"
        }
    }

    public struct MaintenanceStatus: AWSDecodableShape {
        /// The currently selected maintenance day.
        public let maintenanceDay: MaintenanceDay?
        /// Maintenance is required by the displayed date and time. Date and time is in ISO.
        public let maintenanceDeadline: String?
        /// The currently scheduled maintenance date and time. Date and time is in ISO.
        public let maintenanceScheduledDate: String?
        /// The currently selected maintenance start time. Time is in UTC.
        public let maintenanceStartTime: String?

        @inlinable
        public init(maintenanceDay: MaintenanceDay? = nil, maintenanceDeadline: String? = nil, maintenanceScheduledDate: String? = nil, maintenanceStartTime: String? = nil) {
            self.maintenanceDay = maintenanceDay
            self.maintenanceDeadline = maintenanceDeadline
            self.maintenanceScheduledDate = maintenanceScheduledDate
            self.maintenanceStartTime = maintenanceStartTime
        }

        private enum CodingKeys: String, CodingKey {
            case maintenanceDay = "maintenanceDay"
            case maintenanceDeadline = "maintenanceDeadline"
            case maintenanceScheduledDate = "maintenanceScheduledDate"
            case maintenanceStartTime = "maintenanceStartTime"
        }
    }

    public struct MaintenanceUpdateSettings: AWSEncodableShape {
        /// Choose one day of the week for maintenance. The chosen day is used for all future maintenance windows.
        public let maintenanceDay: MaintenanceDay?
        /// Choose a specific date for maintenance to occur. The chosen date is used for the next maintenance window only.
        public let maintenanceScheduledDate: String?
        /// Choose the hour that maintenance will start. The chosen time is used for all future maintenance windows.
        public let maintenanceStartTime: String?

        @inlinable
        public init(maintenanceDay: MaintenanceDay? = nil, maintenanceScheduledDate: String? = nil, maintenanceStartTime: String? = nil) {
            self.maintenanceDay = maintenanceDay
            self.maintenanceScheduledDate = maintenanceScheduledDate
            self.maintenanceStartTime = maintenanceStartTime
        }

        public func validate(name: String) throws {
            try self.validate(self.maintenanceStartTime, name: "maintenanceStartTime", parent: name, pattern: "^([0,1]?[0-9]|2[0-3]):00$")
        }

        private enum CodingKeys: String, CodingKey {
            case maintenanceDay = "maintenanceDay"
            case maintenanceScheduledDate = "maintenanceScheduledDate"
            case maintenanceStartTime = "maintenanceStartTime"
        }
    }

    public struct MediaConnectFlow: AWSDecodableShape {
        /// The unique ARN of the MediaConnect Flow being used as a source.
        public let flowArn: String?

        @inlinable
        public init(flowArn: String? = nil) {
            self.flowArn = flowArn
        }

        private enum CodingKeys: String, CodingKey {
            case flowArn = "flowArn"
        }
    }

    public struct MediaConnectFlowRequest: AWSEncodableShape {
        /// The ARN of the MediaConnect Flow that you want to use as a source.
        public let flowArn: String?

        @inlinable
        public init(flowArn: String? = nil) {
            self.flowArn = flowArn
        }

        private enum CodingKeys: String, CodingKey {
            case flowArn = "flowArn"
        }
    }

    public struct MediaPackageGroupSettings: AWSEncodableShape & AWSDecodableShape {
        /// MediaPackage channel destination.
        public let destination: OutputLocationRef?
        /// Parameters that apply only if the destination parameter (for the output group) specifies a channelGroup and channelName. Use of these two paramters indicates that the output group is for MediaPackage V2 (CMAF Ingest).
        public let mediapackageV2GroupSettings: MediaPackageV2GroupSettings?

        @inlinable
        public init(destination: OutputLocationRef? = nil, mediapackageV2GroupSettings: MediaPackageV2GroupSettings? = nil) {
            self.destination = destination
            self.mediapackageV2GroupSettings = mediapackageV2GroupSettings
        }

        public func validate(name: String) throws {
            try self.mediapackageV2GroupSettings?.validate(name: "\(name).mediapackageV2GroupSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case destination = "destination"
            case mediapackageV2GroupSettings = "mediapackageV2GroupSettings"
        }
    }

    public struct MediaPackageOutputDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        /// Name of the channel group in MediaPackageV2. Only use if you are sending CMAF Ingest output to a CMAF ingest endpoint on a MediaPackage channel that uses MediaPackage v2.
        public let channelGroup: String?
        /// ID of the channel in MediaPackage that is the destination for this output group. You do not need to specify the individual inputs in MediaPackage; MediaLive will handle the connection of the two MediaLive pipelines to the two MediaPackage inputs. The MediaPackage channel and MediaLive channel must be in the same region.
        public let channelId: String?
        /// Name of the channel in MediaPackageV2. Only use if you are sending CMAF Ingest output to a CMAF ingest endpoint on a MediaPackage channel that uses MediaPackage v2.
        public let channelName: String?

        @inlinable
        public init(channelGroup: String? = nil, channelId: String? = nil, channelName: String? = nil) {
            self.channelGroup = channelGroup
            self.channelId = channelId
            self.channelName = channelName
        }

        public func validate(name: String) throws {
            try self.validate(self.channelGroup, name: "channelGroup", parent: name, min: 1)
            try self.validate(self.channelId, name: "channelId", parent: name, min: 1)
            try self.validate(self.channelName, name: "channelName", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case channelGroup = "channelGroup"
            case channelId = "channelId"
            case channelName = "channelName"
        }
    }

    public struct MediaPackageOutputSettings: AWSEncodableShape & AWSDecodableShape {
        /// Optional settings for MediaPackage V2 destinations
        public let mediaPackageV2DestinationSettings: MediaPackageV2DestinationSettings?

        @inlinable
        public init(mediaPackageV2DestinationSettings: MediaPackageV2DestinationSettings? = nil) {
            self.mediaPackageV2DestinationSettings = mediaPackageV2DestinationSettings
        }

        private enum CodingKeys: String, CodingKey {
            case mediaPackageV2DestinationSettings = "mediaPackageV2DestinationSettings"
        }
    }

    public struct MediaPackageV2DestinationSettings: AWSEncodableShape & AWSDecodableShape {
        /// Applies only to an output that contains audio. If you want to put several audio encodes into one audio rendition group, decide on a name (ID) for the group. Then in every audio output that you want to belong to that group, enter that ID in this field. Note that this information is part of the HLS specification (not the CMAF specification), but if you include it then MediaPackage will include it in the manifest it creates for the video player.
        public let audioGroupId: String?
        /// Applies only to an output that contains video, and only if you want to associate one or more audio groups to this video. In this field you assign the groups that you create (in the Group ID fields in the various audio outputs). Enter one group ID, or enter a comma-separated list of group IDs. Note that this information is part of the HLS specification (not the CMAF specification), but if you include it then MediaPackage will include it in the manifest it creates for the video player.
        public let audioRenditionSets: String?
        /// Specifies whether MediaPackage should set this output as the auto-select rendition in the HLS manifest. YES means this must be the auto-select. NO means this should never be the auto-select. OMIT means MediaPackage decides what to set on this rendition.
        /// When you consider all the renditions, follow these guidelines. You can set zero or one renditions to YES. You can set zero or more renditions to NO, but you can't set all renditions to NO. You can set zero, some, or all to OMIT.
        public let hlsAutoSelect: HlsAutoSelect?
        /// Specifies whether MediaPackage should set this output as the default rendition in the HLS manifest. YES means this must be the default. NO means this should never be the default. OMIT means MediaPackage decides what to set on this rendition.
        /// When you consider all the renditions, follow these guidelines. You can set zero or one renditions to YES. You can set zero or more renditions to NO, but you can't set all renditions to NO. You can set zero, some, or all to OMIT.
        public let hlsDefault: HlsDefault?

        @inlinable
        public init(audioGroupId: String? = nil, audioRenditionSets: String? = nil, hlsAutoSelect: HlsAutoSelect? = nil, hlsDefault: HlsDefault? = nil) {
            self.audioGroupId = audioGroupId
            self.audioRenditionSets = audioRenditionSets
            self.hlsAutoSelect = hlsAutoSelect
            self.hlsDefault = hlsDefault
        }

        private enum CodingKeys: String, CodingKey {
            case audioGroupId = "audioGroupId"
            case audioRenditionSets = "audioRenditionSets"
            case hlsAutoSelect = "hlsAutoSelect"
            case hlsDefault = "hlsDefault"
        }
    }

    public struct MediaPackageV2GroupSettings: AWSEncodableShape & AWSDecodableShape {
        /// Mapping of up to 4 caption channels to caption languages.
        public let captionLanguageMappings: [CaptionLanguageMapping]?
        /// Set to ENABLED to enable ID3 metadata insertion. To include metadata, you configure other parameters in the output group, or you add an ID3 action to the channel schedule.
        public let id3Behavior: CmafId3Behavior?
        /// If set to passthrough, passes any KLV data from the input source to this output.
        public let klvBehavior: CmafKLVBehavior?
        /// If set to passthrough, Nielsen inaudible tones for media tracking will be detected in the input audio and an equivalent ID3 tag will be inserted in the output.
        public let nielsenId3Behavior: CmafNielsenId3Behavior?
        /// Type of scte35 track to add. none or scte35WithoutSegmentation
        public let scte35Type: Scte35Type?
        /// The nominal duration of segments. The units are specified in SegmentLengthUnits. The segments will end on the next keyframe after the specified duration, so the actual segment length might be longer, and it might be a fraction of the units.
        public let segmentLength: Int?
        /// Time unit for segment length parameter.
        public let segmentLengthUnits: CmafIngestSegmentLengthUnits?
        /// Set to none if you don't want to insert a timecode in the output. Otherwise choose the frame type for the timecode.
        public let timedMetadataId3Frame: CmafTimedMetadataId3Frame?
        /// If you set up to insert a timecode in the output, specify the frequency for the frame, in seconds.
        public let timedMetadataId3Period: Int?
        /// Set to enabled to pass through ID3 metadata from the input sources.
        public let timedMetadataPassthrough: CmafTimedMetadataPassthrough?

        @inlinable
        public init(captionLanguageMappings: [CaptionLanguageMapping]? = nil, id3Behavior: CmafId3Behavior? = nil, klvBehavior: CmafKLVBehavior? = nil, nielsenId3Behavior: CmafNielsenId3Behavior? = nil, scte35Type: Scte35Type? = nil, segmentLength: Int? = nil, segmentLengthUnits: CmafIngestSegmentLengthUnits? = nil, timedMetadataId3Frame: CmafTimedMetadataId3Frame? = nil, timedMetadataId3Period: Int? = nil, timedMetadataPassthrough: CmafTimedMetadataPassthrough? = nil) {
            self.captionLanguageMappings = captionLanguageMappings
            self.id3Behavior = id3Behavior
            self.klvBehavior = klvBehavior
            self.nielsenId3Behavior = nielsenId3Behavior
            self.scte35Type = scte35Type
            self.segmentLength = segmentLength
            self.segmentLengthUnits = segmentLengthUnits
            self.timedMetadataId3Frame = timedMetadataId3Frame
            self.timedMetadataId3Period = timedMetadataId3Period
            self.timedMetadataPassthrough = timedMetadataPassthrough
        }

        public func validate(name: String) throws {
            try self.captionLanguageMappings?.forEach {
                try $0.validate(name: "\(name).captionLanguageMappings[]")
            }
            try self.validate(self.segmentLength, name: "segmentLength", parent: name, min: 1)
            try self.validate(self.timedMetadataId3Period, name: "timedMetadataId3Period", parent: name, max: 10000)
            try self.validate(self.timedMetadataId3Period, name: "timedMetadataId3Period", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case captionLanguageMappings = "captionLanguageMappings"
            case id3Behavior = "id3Behavior"
            case klvBehavior = "klvBehavior"
            case nielsenId3Behavior = "nielsenId3Behavior"
            case scte35Type = "scte35Type"
            case segmentLength = "segmentLength"
            case segmentLengthUnits = "segmentLengthUnits"
            case timedMetadataId3Frame = "timedMetadataId3Frame"
            case timedMetadataId3Period = "timedMetadataId3Period"
            case timedMetadataPassthrough = "timedMetadataPassthrough"
        }
    }

    public struct MediaResource: AWSDecodableShape {
        public let destinations: [MediaResourceNeighbor]?
        /// The logical name of an AWS media resource.
        public let name: String?
        public let sources: [MediaResourceNeighbor]?

        @inlinable
        public init(destinations: [MediaResourceNeighbor]? = nil, name: String? = nil, sources: [MediaResourceNeighbor]? = nil) {
            self.destinations = destinations
            self.name = name
            self.sources = sources
        }

        private enum CodingKeys: String, CodingKey {
            case destinations = "destinations"
            case name = "name"
            case sources = "sources"
        }
    }

    public struct MediaResourceNeighbor: AWSDecodableShape {
        /// The ARN of a resource used in AWS media workflows.
        public let arn: String?
        /// The logical name of an AWS media resource.
        public let name: String?

        @inlinable
        public init(arn: String? = nil, name: String? = nil) {
            self.arn = arn
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case name = "name"
        }
    }

    public struct MonitorDeployment: AWSDecodableShape {
        /// URI associated with a signal map's monitor deployment.
        public let detailsUri: String?
        /// Error message associated with a failed monitor deployment of a signal map.
        public let errorMessage: String?
        public let status: SignalMapMonitorDeploymentStatus?

        @inlinable
        public init(detailsUri: String? = nil, errorMessage: String? = nil, status: SignalMapMonitorDeploymentStatus? = nil) {
            self.detailsUri = detailsUri
            self.errorMessage = errorMessage
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case detailsUri = "detailsUri"
            case errorMessage = "errorMessage"
            case status = "status"
        }
    }

    public struct MotionGraphicsActivateScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        /// Duration (in milliseconds) that motion graphics should render on to the video stream. Leaving out this property or setting to 0 will result in rendering continuing until a deactivate action is processed.
        public let duration: Int64?
        /// Key used to extract the password from EC2 Parameter store
        public let passwordParam: String?
        /// URI of the HTML5 content to be rendered into the live stream.
        public let url: String?
        /// Documentation update needed
        public let username: String?

        @inlinable
        public init(duration: Int64? = nil, passwordParam: String? = nil, url: String? = nil, username: String? = nil) {
            self.duration = duration
            self.passwordParam = passwordParam
            self.url = url
            self.username = username
        }

        public func validate(name: String) throws {
            try self.validate(self.duration, name: "duration", parent: name, max: 86400000)
            try self.validate(self.duration, name: "duration", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case duration = "duration"
            case passwordParam = "passwordParam"
            case url = "url"
            case username = "username"
        }
    }

    public struct MotionGraphicsConfiguration: AWSEncodableShape & AWSDecodableShape {
        public let motionGraphicsInsertion: MotionGraphicsInsertion?
        /// Motion Graphics Settings
        public let motionGraphicsSettings: MotionGraphicsSettings?

        @inlinable
        public init(motionGraphicsInsertion: MotionGraphicsInsertion? = nil, motionGraphicsSettings: MotionGraphicsSettings? = nil) {
            self.motionGraphicsInsertion = motionGraphicsInsertion
            self.motionGraphicsSettings = motionGraphicsSettings
        }

        private enum CodingKeys: String, CodingKey {
            case motionGraphicsInsertion = "motionGraphicsInsertion"
            case motionGraphicsSettings = "motionGraphicsSettings"
        }
    }

    public struct MotionGraphicsDeactivateScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct MotionGraphicsSettings: AWSEncodableShape & AWSDecodableShape {
        public let htmlMotionGraphicsSettings: HtmlMotionGraphicsSettings?

        @inlinable
        public init(htmlMotionGraphicsSettings: HtmlMotionGraphicsSettings? = nil) {
            self.htmlMotionGraphicsSettings = htmlMotionGraphicsSettings
        }

        private enum CodingKeys: String, CodingKey {
            case htmlMotionGraphicsSettings = "htmlMotionGraphicsSettings"
        }
    }

    public struct Mp2Settings: AWSEncodableShape & AWSDecodableShape {
        /// Average bitrate in bits/second.
        public let bitrate: Double?
        /// The MPEG2 Audio coding mode.  Valid values are codingMode10 (for mono) or codingMode20 (for stereo).
        public let codingMode: Mp2CodingMode?
        /// Sample rate in Hz.
        public let sampleRate: Double?

        @inlinable
        public init(bitrate: Double? = nil, codingMode: Mp2CodingMode? = nil, sampleRate: Double? = nil) {
            self.bitrate = bitrate
            self.codingMode = codingMode
            self.sampleRate = sampleRate
        }

        private enum CodingKeys: String, CodingKey {
            case bitrate = "bitrate"
            case codingMode = "codingMode"
            case sampleRate = "sampleRate"
        }
    }

    public struct Mpeg2FilterSettings: AWSEncodableShape & AWSDecodableShape {
        public let temporalFilterSettings: TemporalFilterSettings?

        @inlinable
        public init(temporalFilterSettings: TemporalFilterSettings? = nil) {
            self.temporalFilterSettings = temporalFilterSettings
        }

        private enum CodingKeys: String, CodingKey {
            case temporalFilterSettings = "temporalFilterSettings"
        }
    }

    public struct Mpeg2Settings: AWSEncodableShape & AWSDecodableShape {
        /// Choose Off to disable adaptive quantization. Or choose another value to enable the quantizer and set its strength. The strengths are: Auto, Off, Low, Medium, High. When you enable this field, MediaLive allows intra-frame quantizers to vary, which might improve visual quality.
        public let adaptiveQuantization: Mpeg2AdaptiveQuantization?
        /// Indicates the AFD values that MediaLive will write into the video encode. If you do not know what AFD signaling is, or if your downstream system has not given you guidance, choose AUTO.
        /// AUTO: MediaLive will try to preserve the input AFD value (in cases where multiple AFD values are valid).
        /// FIXED: MediaLive will use the value you specify in fixedAFD.
        public let afdSignaling: AfdSignaling?
        /// Specifies whether to include the color space metadata. The metadata describes the color space that applies to the video (the colorSpace field). We recommend that you insert the metadata.
        public let colorMetadata: Mpeg2ColorMetadata?
        /// Choose the type of color space conversion to apply to the output. For detailed information on setting up both the input and the output to obtain the desired color space in the output, see the section on \"MediaLive Features - Video - color space\" in the MediaLive User Guide.
        /// PASSTHROUGH: Keep the color space of the input content - do not convert it.
        /// AUTO:Convert all content that is SD to rec 601, and convert all content that is HD to rec 709.
        public let colorSpace: Mpeg2ColorSpace?
        /// Sets the pixel aspect ratio for the encode.
        public let displayAspectRatio: Mpeg2DisplayRatio?
        /// Optionally specify a noise reduction filter, which can improve quality of compressed content. If you do not choose a filter, no filter will be applied.
        /// TEMPORAL: This filter is useful for both source content that is noisy (when it has excessive digital artifacts) and source content that is clean.
        /// When the content is noisy, the filter cleans up the source content before the encoding phase, with these two effects: First, it improves the output video quality because the content has been cleaned up. Secondly, it decreases the bandwidth because MediaLive does not waste bits on encoding noise.
        /// When the content is reasonably clean, the filter tends to decrease the bitrate.
        public let filterSettings: Mpeg2FilterSettings?
        /// Complete this field only when afdSignaling is set to FIXED. Enter the AFD value (4 bits) to write on all frames of the video encode.
        public let fixedAfd: FixedAfd?
        /// description": "The framerate denominator. For example, 1001. The framerate is the numerator divided by the denominator. For example, 24000 / 1001 = 23.976 FPS.
        public let framerateDenominator: Int?
        /// The framerate numerator. For example, 24000. The framerate is the numerator divided by the denominator. For example, 24000 / 1001 = 23.976 FPS.
        public let framerateNumerator: Int?
        /// MPEG2: default is open GOP.
        public let gopClosedCadence: Int?
        /// Relates to the GOP structure. The number of B-frames between reference frames. If you do not know what a B-frame is, use the default.
        public let gopNumBFrames: Int?
        /// Relates to the GOP structure. The GOP size (keyframe interval) in the units specified in gopSizeUnits. If you do not know what GOP is, use the default.
        /// If gopSizeUnits is frames, then the gopSize must be an integer and must be greater than or equal to 1.
        /// If gopSizeUnits is seconds, the gopSize must be greater than 0, but does not need to be an integer.
        public let gopSize: Double?
        /// Relates to the GOP structure. Specifies whether the gopSize is specified in frames or seconds. If you do not plan to change the default gopSize, leave the default. If you specify SECONDS, MediaLive will internally convert the gop size to a frame count.
        public let gopSizeUnits: Mpeg2GopSizeUnits?
        /// Set the scan type of the output to PROGRESSIVE or INTERLACED (top field first).
        public let scanType: Mpeg2ScanType?
        /// Relates to the GOP structure. If you do not know what GOP is, use the default.
        /// FIXED: Set the number of B-frames in each sub-GOP to the value in gopNumBFrames.
        /// DYNAMIC: Let MediaLive optimize the number of B-frames in each sub-GOP, to improve visual quality.
        public let subgopLength: Mpeg2SubGopLength?
        /// Timecode burn-in settings
        public let timecodeBurninSettings: TimecodeBurninSettings?
        /// Determines how MediaLive inserts timecodes in the output video. For detailed information about setting up the input and the output for a timecode, see the section on \"MediaLive Features - Timecode configuration\" in the MediaLive User Guide.
        /// DISABLED: do not include timecodes.
        /// GOP_TIMECODE: Include timecode metadata in the GOP header.
        public let timecodeInsertion: Mpeg2TimecodeInsertionBehavior?

        @inlinable
        public init(adaptiveQuantization: Mpeg2AdaptiveQuantization? = nil, afdSignaling: AfdSignaling? = nil, colorMetadata: Mpeg2ColorMetadata? = nil, colorSpace: Mpeg2ColorSpace? = nil, displayAspectRatio: Mpeg2DisplayRatio? = nil, filterSettings: Mpeg2FilterSettings? = nil, fixedAfd: FixedAfd? = nil, framerateDenominator: Int? = nil, framerateNumerator: Int? = nil, gopClosedCadence: Int? = nil, gopNumBFrames: Int? = nil, gopSize: Double? = nil, gopSizeUnits: Mpeg2GopSizeUnits? = nil, scanType: Mpeg2ScanType? = nil, subgopLength: Mpeg2SubGopLength? = nil, timecodeBurninSettings: TimecodeBurninSettings? = nil, timecodeInsertion: Mpeg2TimecodeInsertionBehavior? = nil) {
            self.adaptiveQuantization = adaptiveQuantization
            self.afdSignaling = afdSignaling
            self.colorMetadata = colorMetadata
            self.colorSpace = colorSpace
            self.displayAspectRatio = displayAspectRatio
            self.filterSettings = filterSettings
            self.fixedAfd = fixedAfd
            self.framerateDenominator = framerateDenominator
            self.framerateNumerator = framerateNumerator
            self.gopClosedCadence = gopClosedCadence
            self.gopNumBFrames = gopNumBFrames
            self.gopSize = gopSize
            self.gopSizeUnits = gopSizeUnits
            self.scanType = scanType
            self.subgopLength = subgopLength
            self.timecodeBurninSettings = timecodeBurninSettings
            self.timecodeInsertion = timecodeInsertion
        }

        public func validate(name: String) throws {
            try self.validate(self.framerateDenominator, name: "framerateDenominator", parent: name, min: 1)
            try self.validate(self.framerateNumerator, name: "framerateNumerator", parent: name, min: 1)
            try self.validate(self.gopClosedCadence, name: "gopClosedCadence", parent: name, min: 0)
            try self.validate(self.gopNumBFrames, name: "gopNumBFrames", parent: name, max: 7)
            try self.validate(self.gopNumBFrames, name: "gopNumBFrames", parent: name, min: 0)
            try self.timecodeBurninSettings?.validate(name: "\(name).timecodeBurninSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case adaptiveQuantization = "adaptiveQuantization"
            case afdSignaling = "afdSignaling"
            case colorMetadata = "colorMetadata"
            case colorSpace = "colorSpace"
            case displayAspectRatio = "displayAspectRatio"
            case filterSettings = "filterSettings"
            case fixedAfd = "fixedAfd"
            case framerateDenominator = "framerateDenominator"
            case framerateNumerator = "framerateNumerator"
            case gopClosedCadence = "gopClosedCadence"
            case gopNumBFrames = "gopNumBFrames"
            case gopSize = "gopSize"
            case gopSizeUnits = "gopSizeUnits"
            case scanType = "scanType"
            case subgopLength = "subgopLength"
            case timecodeBurninSettings = "timecodeBurninSettings"
            case timecodeInsertion = "timecodeInsertion"
        }
    }

    public struct MsSmoothGroupSettings: AWSEncodableShape & AWSDecodableShape {
        /// The ID to include in each message in the sparse track. Ignored if sparseTrackType is NONE.
        public let acquisitionPointId: String?
        /// If set to passthrough for an audio-only MS Smooth output, the fragment absolute time will be set to the current timecode. This option does not write timecodes to the audio elementary stream.
        public let audioOnlyTimecodeControl: SmoothGroupAudioOnlyTimecodeControl?
        /// If set to verifyAuthenticity, verify the https certificate chain to a trusted Certificate Authority (CA).  This will cause https outputs to self-signed certificates to fail.
        public let certificateMode: SmoothGroupCertificateMode?
        /// Number of seconds to wait before retrying connection to the IIS server if the connection is lost. Content will be cached during this time and the cache will be be delivered to the IIS server once the connection is re-established.
        public let connectionRetryInterval: Int?
        /// Smooth Streaming publish point on an IIS server. Elemental Live acts as a "Push" encoder to IIS.
        public let destination: OutputLocationRef?
        /// MS Smooth event ID to be sent to the IIS server.
        /// Should only be specified if eventIdMode is set to useConfigured.
        public let eventId: String?
        /// Specifies whether or not to send an event ID to the IIS server. If no event ID is sent and the same Live Event is used without changing the publishing point, clients might see cached video from the previous run.
        /// Options:
        /// - "useConfigured" - use the value provided in eventId
        /// - "useTimestamp" - generate and send an event ID based on the current timestamp
        /// - "noEventId" - do not send an event ID to the IIS server.
        public let eventIdMode: SmoothGroupEventIdMode?
        /// When set to sendEos, send EOS signal to IIS server when stopping the event
        public let eventStopBehavior: SmoothGroupEventStopBehavior?
        /// Size in seconds of file cache for streaming outputs.
        public let filecacheDuration: Int?
        /// Length of mp4 fragments to generate (in seconds). Fragment length must be compatible with GOP size and framerate.
        public let fragmentLength: Int?
        /// Parameter that control output group behavior on input loss.
        public let inputLossAction: InputLossActionForMsSmoothOut?
        /// Number of retry attempts.
        public let numRetries: Int?
        /// Number of seconds before initiating a restart due to output failure, due to exhausting the numRetries on one segment, or exceeding filecacheDuration.
        public let restartDelay: Int?
        /// useInputSegmentation has been deprecated. The configured segment size is always used.
        public let segmentationMode: SmoothGroupSegmentationMode?
        /// Number of milliseconds to delay the output from the second pipeline.
        public let sendDelayMs: Int?
        /// Identifies the type of data to place in the sparse track:
        /// - SCTE35: Insert SCTE-35 messages from the source content. With each message, insert an IDR frame to start a new segment.
        /// - SCTE35_WITHOUT_SEGMENTATION: Insert SCTE-35 messages from the source content. With each message, insert an IDR frame but don't start a new segment.
        /// - NONE: Don't generate a sparse track for any outputs in this output group.
        public let sparseTrackType: SmoothGroupSparseTrackType?
        /// When set to send, send stream manifest so publishing point doesn't start until all streams start.
        public let streamManifestBehavior: SmoothGroupStreamManifestBehavior?
        /// Timestamp offset for the event.  Only used if timestampOffsetMode is set to useConfiguredOffset.
        public let timestampOffset: String?
        /// Type of timestamp date offset to use.
        /// - useEventStartDate: Use the date the event was started as the offset
        /// - useConfiguredOffset: Use an explicitly configured date as the offset
        public let timestampOffsetMode: SmoothGroupTimestampOffsetMode?

        @inlinable
        public init(acquisitionPointId: String? = nil, audioOnlyTimecodeControl: SmoothGroupAudioOnlyTimecodeControl? = nil, certificateMode: SmoothGroupCertificateMode? = nil, connectionRetryInterval: Int? = nil, destination: OutputLocationRef? = nil, eventId: String? = nil, eventIdMode: SmoothGroupEventIdMode? = nil, eventStopBehavior: SmoothGroupEventStopBehavior? = nil, filecacheDuration: Int? = nil, fragmentLength: Int? = nil, inputLossAction: InputLossActionForMsSmoothOut? = nil, numRetries: Int? = nil, restartDelay: Int? = nil, segmentationMode: SmoothGroupSegmentationMode? = nil, sendDelayMs: Int? = nil, sparseTrackType: SmoothGroupSparseTrackType? = nil, streamManifestBehavior: SmoothGroupStreamManifestBehavior? = nil, timestampOffset: String? = nil, timestampOffsetMode: SmoothGroupTimestampOffsetMode? = nil) {
            self.acquisitionPointId = acquisitionPointId
            self.audioOnlyTimecodeControl = audioOnlyTimecodeControl
            self.certificateMode = certificateMode
            self.connectionRetryInterval = connectionRetryInterval
            self.destination = destination
            self.eventId = eventId
            self.eventIdMode = eventIdMode
            self.eventStopBehavior = eventStopBehavior
            self.filecacheDuration = filecacheDuration
            self.fragmentLength = fragmentLength
            self.inputLossAction = inputLossAction
            self.numRetries = numRetries
            self.restartDelay = restartDelay
            self.segmentationMode = segmentationMode
            self.sendDelayMs = sendDelayMs
            self.sparseTrackType = sparseTrackType
            self.streamManifestBehavior = streamManifestBehavior
            self.timestampOffset = timestampOffset
            self.timestampOffsetMode = timestampOffsetMode
        }

        public func validate(name: String) throws {
            try self.validate(self.connectionRetryInterval, name: "connectionRetryInterval", parent: name, min: 0)
            try self.validate(self.filecacheDuration, name: "filecacheDuration", parent: name, min: 0)
            try self.validate(self.fragmentLength, name: "fragmentLength", parent: name, min: 1)
            try self.validate(self.numRetries, name: "numRetries", parent: name, min: 0)
            try self.validate(self.restartDelay, name: "restartDelay", parent: name, min: 0)
            try self.validate(self.sendDelayMs, name: "sendDelayMs", parent: name, max: 10000)
            try self.validate(self.sendDelayMs, name: "sendDelayMs", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case acquisitionPointId = "acquisitionPointId"
            case audioOnlyTimecodeControl = "audioOnlyTimecodeControl"
            case certificateMode = "certificateMode"
            case connectionRetryInterval = "connectionRetryInterval"
            case destination = "destination"
            case eventId = "eventId"
            case eventIdMode = "eventIdMode"
            case eventStopBehavior = "eventStopBehavior"
            case filecacheDuration = "filecacheDuration"
            case fragmentLength = "fragmentLength"
            case inputLossAction = "inputLossAction"
            case numRetries = "numRetries"
            case restartDelay = "restartDelay"
            case segmentationMode = "segmentationMode"
            case sendDelayMs = "sendDelayMs"
            case sparseTrackType = "sparseTrackType"
            case streamManifestBehavior = "streamManifestBehavior"
            case timestampOffset = "timestampOffset"
            case timestampOffsetMode = "timestampOffsetMode"
        }
    }

    public struct MsSmoothOutputSettings: AWSEncodableShape & AWSDecodableShape {
        /// Only applicable when this output is referencing an H.265 video description.
        /// Specifies whether MP4 segments should be packaged as HEV1 or HVC1.
        public let h265PackagingType: MsSmoothH265PackagingType?
        /// String concatenated to the end of the destination filename.  Required for multiple outputs of the same type.
        public let nameModifier: String?

        @inlinable
        public init(h265PackagingType: MsSmoothH265PackagingType? = nil, nameModifier: String? = nil) {
            self.h265PackagingType = h265PackagingType
            self.nameModifier = nameModifier
        }

        private enum CodingKeys: String, CodingKey {
            case h265PackagingType = "h265PackagingType"
            case nameModifier = "nameModifier"
        }
    }

    public struct MulticastInputSettings: AWSEncodableShape & AWSDecodableShape {
        /// Optionally, a source ip address to filter by for Source-specific Multicast (SSM)
        public let sourceIpAddress: String?

        @inlinable
        public init(sourceIpAddress: String? = nil) {
            self.sourceIpAddress = sourceIpAddress
        }

        private enum CodingKeys: String, CodingKey {
            case sourceIpAddress = "sourceIpAddress"
        }
    }

    public struct MulticastSettings: AWSDecodableShape {
        public let sources: [MulticastSource]?

        @inlinable
        public init(sources: [MulticastSource]? = nil) {
            self.sources = sources
        }

        private enum CodingKeys: String, CodingKey {
            case sources = "sources"
        }
    }

    public struct MulticastSettingsCreateRequest: AWSEncodableShape {
        public let sources: [MulticastSourceCreateRequest]?

        @inlinable
        public init(sources: [MulticastSourceCreateRequest]? = nil) {
            self.sources = sources
        }

        private enum CodingKeys: String, CodingKey {
            case sources = "sources"
        }
    }

    public struct MulticastSettingsUpdateRequest: AWSEncodableShape {
        public let sources: [MulticastSourceUpdateRequest]?

        @inlinable
        public init(sources: [MulticastSourceUpdateRequest]? = nil) {
            self.sources = sources
        }

        private enum CodingKeys: String, CodingKey {
            case sources = "sources"
        }
    }

    public struct MulticastSource: AWSDecodableShape {
        /// This represents the ip address of the device sending the multicast stream.
        public let sourceIp: String?
        /// This represents the customer's source URL where multicast stream is pulled from.
        public let url: String?

        @inlinable
        public init(sourceIp: String? = nil, url: String? = nil) {
            self.sourceIp = sourceIp
            self.url = url
        }

        private enum CodingKeys: String, CodingKey {
            case sourceIp = "sourceIp"
            case url = "url"
        }
    }

    public struct MulticastSourceCreateRequest: AWSEncodableShape {
        /// This represents the ip address of the device sending the multicast stream.
        public let sourceIp: String?
        /// This represents the customer's source URL where multicast stream is pulled from.
        public let url: String?

        @inlinable
        public init(sourceIp: String? = nil, url: String? = nil) {
            self.sourceIp = sourceIp
            self.url = url
        }

        private enum CodingKeys: String, CodingKey {
            case sourceIp = "sourceIp"
            case url = "url"
        }
    }

    public struct MulticastSourceUpdateRequest: AWSEncodableShape {
        /// This represents the ip address of the device sending the multicast stream.
        public let sourceIp: String?
        /// This represents the customer's source URL where multicast stream is pulled from.
        public let url: String?

        @inlinable
        public init(sourceIp: String? = nil, url: String? = nil) {
            self.sourceIp = sourceIp
            self.url = url
        }

        private enum CodingKeys: String, CodingKey {
            case sourceIp = "sourceIp"
            case url = "url"
        }
    }

    public struct Multiplex: AWSDecodableShape {
        /// The unique arn of the multiplex.
        public let arn: String?
        /// A list of availability zones for the multiplex.
        public let availabilityZones: [String]?
        /// A list of the multiplex output destinations.
        public let destinations: [MultiplexOutputDestination]?
        /// The unique id of the multiplex.
        public let id: String?
        /// Configuration for a multiplex event.
        public let multiplexSettings: MultiplexSettings?
        /// The name of the multiplex.
        public let name: String?
        /// The number of currently healthy pipelines.
        public let pipelinesRunningCount: Int?
        /// The number of programs in the multiplex.
        public let programCount: Int?
        /// The current state of the multiplex.
        public let state: MultiplexState?
        /// A collection of key-value pairs.
        public let tags: [String: String]?

        @inlinable
        public init(arn: String? = nil, availabilityZones: [String]? = nil, destinations: [MultiplexOutputDestination]? = nil, id: String? = nil, multiplexSettings: MultiplexSettings? = nil, name: String? = nil, pipelinesRunningCount: Int? = nil, programCount: Int? = nil, state: MultiplexState? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.availabilityZones = availabilityZones
            self.destinations = destinations
            self.id = id
            self.multiplexSettings = multiplexSettings
            self.name = name
            self.pipelinesRunningCount = pipelinesRunningCount
            self.programCount = programCount
            self.state = state
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case availabilityZones = "availabilityZones"
            case destinations = "destinations"
            case id = "id"
            case multiplexSettings = "multiplexSettings"
            case name = "name"
            case pipelinesRunningCount = "pipelinesRunningCount"
            case programCount = "programCount"
            case state = "state"
            case tags = "tags"
        }
    }

    public struct MultiplexContainerSettings: AWSEncodableShape & AWSDecodableShape {
        public let multiplexM2tsSettings: MultiplexM2tsSettings?

        @inlinable
        public init(multiplexM2tsSettings: MultiplexM2tsSettings? = nil) {
            self.multiplexM2tsSettings = multiplexM2tsSettings
        }

        public func validate(name: String) throws {
            try self.multiplexM2tsSettings?.validate(name: "\(name).multiplexM2tsSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case multiplexM2tsSettings = "multiplexM2tsSettings"
        }
    }

    public struct MultiplexGroupSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct MultiplexM2tsSettings: AWSEncodableShape & AWSDecodableShape {
        /// When set to drop, output audio streams will be removed from the program if the selected input audio stream is removed from the input. This allows the output audio configuration to dynamically change based on input configuration. If this is set to encodeSilence, all output audio streams will output encoded silence when not connected to an active input stream.
        public let absentInputAudioBehavior: M2tsAbsentInputAudioBehavior?
        /// When set to enabled, uses ARIB-compliant field muxing and removes video descriptor.
        public let arib: M2tsArib?
        /// When set to dvb, uses DVB buffer model for Dolby Digital audio.  When set to atsc, the ATSC model is used.
        public let audioBufferModel: M2tsAudioBufferModel?
        /// The number of audio frames to insert for each PES packet.
        public let audioFramesPerPes: Int?
        /// When set to atsc, uses stream type = 0x81 for AC3 and stream type = 0x87 for EAC3. When set to dvb, uses stream type = 0x06.
        public let audioStreamType: M2tsAudioStreamType?
        /// When set to enabled, generates captionServiceDescriptor in PMT.
        public let ccDescriptor: M2tsCcDescriptor?
        /// If set to passthrough, passes any EBIF data from the input source to this output.
        public let ebif: M2tsEbifControl?
        /// Include or exclude the ES Rate field in the PES header.
        public let esRateInPes: M2tsEsRateInPes?
        /// If set to passthrough, passes any KLV data from the input source to this output.
        public let klv: M2tsKlv?
        /// If set to passthrough, Nielsen inaudible tones for media tracking will be detected in the input audio and an equivalent ID3 tag will be inserted in the output.
        public let nielsenId3Behavior: M2tsNielsenId3Behavior?
        /// When set to pcrEveryPesPacket, a Program Clock Reference value is inserted for every Packetized Elementary Stream (PES) header. This parameter is effective only when the PCR PID is the same as the video or audio elementary stream.
        public let pcrControl: M2tsPcrControl?
        /// Maximum time in milliseconds between Program Clock Reference (PCRs) inserted into the transport stream.
        public let pcrPeriod: Int?
        /// Optionally pass SCTE-35 signals from the input source to this output.
        public let scte35Control: M2tsScte35Control?
        /// Defines the amount SCTE-35 preroll will be increased (in milliseconds) on the output. Preroll is the amount of time between the presence of a SCTE-35 indication in a transport stream and the PTS of the video frame it references. Zero means don't add pullup (it doesn't mean set the preroll to zero). Negative pullup is not supported, which means that you can't make the preroll shorter. Be aware that latency in the output will increase by the pullup amount.
        public let scte35PrerollPullupMilliseconds: Double?

        @inlinable
        public init(absentInputAudioBehavior: M2tsAbsentInputAudioBehavior? = nil, arib: M2tsArib? = nil, audioBufferModel: M2tsAudioBufferModel? = nil, audioFramesPerPes: Int? = nil, audioStreamType: M2tsAudioStreamType? = nil, ccDescriptor: M2tsCcDescriptor? = nil, ebif: M2tsEbifControl? = nil, esRateInPes: M2tsEsRateInPes? = nil, klv: M2tsKlv? = nil, nielsenId3Behavior: M2tsNielsenId3Behavior? = nil, pcrControl: M2tsPcrControl? = nil, pcrPeriod: Int? = nil, scte35Control: M2tsScte35Control? = nil, scte35PrerollPullupMilliseconds: Double? = nil) {
            self.absentInputAudioBehavior = absentInputAudioBehavior
            self.arib = arib
            self.audioBufferModel = audioBufferModel
            self.audioFramesPerPes = audioFramesPerPes
            self.audioStreamType = audioStreamType
            self.ccDescriptor = ccDescriptor
            self.ebif = ebif
            self.esRateInPes = esRateInPes
            self.klv = klv
            self.nielsenId3Behavior = nielsenId3Behavior
            self.pcrControl = pcrControl
            self.pcrPeriod = pcrPeriod
            self.scte35Control = scte35Control
            self.scte35PrerollPullupMilliseconds = scte35PrerollPullupMilliseconds
        }

        public func validate(name: String) throws {
            try self.validate(self.audioFramesPerPes, name: "audioFramesPerPes", parent: name, min: 0)
            try self.validate(self.pcrPeriod, name: "pcrPeriod", parent: name, max: 500)
            try self.validate(self.pcrPeriod, name: "pcrPeriod", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case absentInputAudioBehavior = "absentInputAudioBehavior"
            case arib = "arib"
            case audioBufferModel = "audioBufferModel"
            case audioFramesPerPes = "audioFramesPerPes"
            case audioStreamType = "audioStreamType"
            case ccDescriptor = "ccDescriptor"
            case ebif = "ebif"
            case esRateInPes = "esRateInPes"
            case klv = "klv"
            case nielsenId3Behavior = "nielsenId3Behavior"
            case pcrControl = "pcrControl"
            case pcrPeriod = "pcrPeriod"
            case scte35Control = "scte35Control"
            case scte35PrerollPullupMilliseconds = "scte35PrerollPullupMilliseconds"
        }
    }

    public struct MultiplexMediaConnectOutputDestinationSettings: AWSDecodableShape {
        /// The MediaConnect entitlement ARN available as a Flow source.
        public let entitlementArn: String?

        @inlinable
        public init(entitlementArn: String? = nil) {
            self.entitlementArn = entitlementArn
        }

        private enum CodingKeys: String, CodingKey {
            case entitlementArn = "entitlementArn"
        }
    }

    public struct MultiplexOutputDestination: AWSDecodableShape {
        /// Multiplex MediaConnect output destination settings.
        public let mediaConnectSettings: MultiplexMediaConnectOutputDestinationSettings?

        @inlinable
        public init(mediaConnectSettings: MultiplexMediaConnectOutputDestinationSettings? = nil) {
            self.mediaConnectSettings = mediaConnectSettings
        }

        private enum CodingKeys: String, CodingKey {
            case mediaConnectSettings = "mediaConnectSettings"
        }
    }

    public struct MultiplexOutputSettings: AWSEncodableShape & AWSDecodableShape {
        public let containerSettings: MultiplexContainerSettings?
        /// Destination is a Multiplex.
        public let destination: OutputLocationRef?

        @inlinable
        public init(containerSettings: MultiplexContainerSettings? = nil, destination: OutputLocationRef? = nil) {
            self.containerSettings = containerSettings
            self.destination = destination
        }

        public func validate(name: String) throws {
            try self.containerSettings?.validate(name: "\(name).containerSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case containerSettings = "containerSettings"
            case destination = "destination"
        }
    }

    public struct MultiplexProgram: AWSDecodableShape {
        /// The MediaLive channel associated with the program.
        public let channelId: String?
        /// The settings for this multiplex program.
        public let multiplexProgramSettings: MultiplexProgramSettings?
        /// The packet identifier map for this multiplex program.
        public let packetIdentifiersMap: MultiplexProgramPacketIdentifiersMap?
        /// Contains information about the current sources for the specified program in the specified multiplex. Keep in mind that each multiplex pipeline connects to both pipelines in a given source channel (the channel identified by the program). But only one of those channel pipelines is ever active at one time.
        public let pipelineDetails: [MultiplexProgramPipelineDetail]?
        /// The name of the multiplex program.
        public let programName: String?

        @inlinable
        public init(channelId: String? = nil, multiplexProgramSettings: MultiplexProgramSettings? = nil, packetIdentifiersMap: MultiplexProgramPacketIdentifiersMap? = nil, pipelineDetails: [MultiplexProgramPipelineDetail]? = nil, programName: String? = nil) {
            self.channelId = channelId
            self.multiplexProgramSettings = multiplexProgramSettings
            self.packetIdentifiersMap = packetIdentifiersMap
            self.pipelineDetails = pipelineDetails
            self.programName = programName
        }

        private enum CodingKeys: String, CodingKey {
            case channelId = "channelId"
            case multiplexProgramSettings = "multiplexProgramSettings"
            case packetIdentifiersMap = "packetIdentifiersMap"
            case pipelineDetails = "pipelineDetails"
            case programName = "programName"
        }
    }

    public struct MultiplexProgramChannelDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        /// The ID of the Multiplex that the encoder is providing output to. You do not need to specify the individual inputs to the Multiplex; MediaLive will handle the connection of the two MediaLive pipelines to the two Multiplex instances.
        /// The Multiplex must be in the same region as the Channel.
        public let multiplexId: String?
        /// The program name of the Multiplex program that the encoder is providing output to.
        public let programName: String?

        @inlinable
        public init(multiplexId: String? = nil, programName: String? = nil) {
            self.multiplexId = multiplexId
            self.programName = programName
        }

        public func validate(name: String) throws {
            try self.validate(self.multiplexId, name: "multiplexId", parent: name, min: 1)
            try self.validate(self.programName, name: "programName", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case multiplexId = "multiplexId"
            case programName = "programName"
        }
    }

    public struct MultiplexProgramPacketIdentifiersMap: AWSEncodableShape & AWSDecodableShape {
        public let aribCaptionsPid: Int?
        public let audioPids: [Int]?
        public let dvbSubPids: [Int]?
        public let dvbTeletextPid: Int?
        public let dvbTeletextPids: [Int]?
        public let ecmPid: Int?
        public let etvPlatformPid: Int?
        public let etvSignalPid: Int?
        public let klvDataPids: [Int]?
        public let pcrPid: Int?
        public let pmtPid: Int?
        public let privateMetadataPid: Int?
        public let scte27Pids: [Int]?
        public let scte35Pid: Int?
        public let smpte2038Pid: Int?
        public let timedMetadataPid: Int?
        public let videoPid: Int?

        @inlinable
        public init(aribCaptionsPid: Int? = nil, audioPids: [Int]? = nil, dvbSubPids: [Int]? = nil, dvbTeletextPid: Int? = nil, dvbTeletextPids: [Int]? = nil, ecmPid: Int? = nil, etvPlatformPid: Int? = nil, etvSignalPid: Int? = nil, klvDataPids: [Int]? = nil, pcrPid: Int? = nil, pmtPid: Int? = nil, privateMetadataPid: Int? = nil, scte27Pids: [Int]? = nil, scte35Pid: Int? = nil, smpte2038Pid: Int? = nil, timedMetadataPid: Int? = nil, videoPid: Int? = nil) {
            self.aribCaptionsPid = aribCaptionsPid
            self.audioPids = audioPids
            self.dvbSubPids = dvbSubPids
            self.dvbTeletextPid = dvbTeletextPid
            self.dvbTeletextPids = dvbTeletextPids
            self.ecmPid = ecmPid
            self.etvPlatformPid = etvPlatformPid
            self.etvSignalPid = etvSignalPid
            self.klvDataPids = klvDataPids
            self.pcrPid = pcrPid
            self.pmtPid = pmtPid
            self.privateMetadataPid = privateMetadataPid
            self.scte27Pids = scte27Pids
            self.scte35Pid = scte35Pid
            self.smpte2038Pid = smpte2038Pid
            self.timedMetadataPid = timedMetadataPid
            self.videoPid = videoPid
        }

        private enum CodingKeys: String, CodingKey {
            case aribCaptionsPid = "aribCaptionsPid"
            case audioPids = "audioPids"
            case dvbSubPids = "dvbSubPids"
            case dvbTeletextPid = "dvbTeletextPid"
            case dvbTeletextPids = "dvbTeletextPids"
            case ecmPid = "ecmPid"
            case etvPlatformPid = "etvPlatformPid"
            case etvSignalPid = "etvSignalPid"
            case klvDataPids = "klvDataPids"
            case pcrPid = "pcrPid"
            case pmtPid = "pmtPid"
            case privateMetadataPid = "privateMetadataPid"
            case scte27Pids = "scte27Pids"
            case scte35Pid = "scte35Pid"
            case smpte2038Pid = "smpte2038Pid"
            case timedMetadataPid = "timedMetadataPid"
            case videoPid = "videoPid"
        }
    }

    public struct MultiplexProgramPipelineDetail: AWSDecodableShape {
        /// Identifies the channel pipeline that is currently active for the pipeline (identified by PipelineId) in the multiplex.
        public let activeChannelPipeline: String?
        /// Identifies a specific pipeline in the multiplex.
        public let pipelineId: String?

        @inlinable
        public init(activeChannelPipeline: String? = nil, pipelineId: String? = nil) {
            self.activeChannelPipeline = activeChannelPipeline
            self.pipelineId = pipelineId
        }

        private enum CodingKeys: String, CodingKey {
            case activeChannelPipeline = "activeChannelPipeline"
            case pipelineId = "pipelineId"
        }
    }

    public struct MultiplexProgramServiceDescriptor: AWSEncodableShape & AWSDecodableShape {
        /// Name of the provider.
        public let providerName: String?
        /// Name of the service.
        public let serviceName: String?

        @inlinable
        public init(providerName: String? = nil, serviceName: String? = nil) {
            self.providerName = providerName
            self.serviceName = serviceName
        }

        public func validate(name: String) throws {
            try self.validate(self.providerName, name: "providerName", parent: name, max: 256)
            try self.validate(self.serviceName, name: "serviceName", parent: name, max: 256)
        }

        private enum CodingKeys: String, CodingKey {
            case providerName = "providerName"
            case serviceName = "serviceName"
        }
    }

    public struct MultiplexProgramSettings: AWSEncodableShape & AWSDecodableShape {
        /// Indicates which pipeline is preferred by the multiplex for program ingest.
        public let preferredChannelPipeline: PreferredChannelPipeline?
        /// Unique program number.
        public let programNumber: Int?
        /// Transport stream service descriptor configuration for the Multiplex program.
        public let serviceDescriptor: MultiplexProgramServiceDescriptor?
        /// Program video settings configuration.
        public let videoSettings: MultiplexVideoSettings?

        @inlinable
        public init(preferredChannelPipeline: PreferredChannelPipeline? = nil, programNumber: Int? = nil, serviceDescriptor: MultiplexProgramServiceDescriptor? = nil, videoSettings: MultiplexVideoSettings? = nil) {
            self.preferredChannelPipeline = preferredChannelPipeline
            self.programNumber = programNumber
            self.serviceDescriptor = serviceDescriptor
            self.videoSettings = videoSettings
        }

        public func validate(name: String) throws {
            try self.validate(self.programNumber, name: "programNumber", parent: name, max: 65535)
            try self.validate(self.programNumber, name: "programNumber", parent: name, min: 0)
            try self.serviceDescriptor?.validate(name: "\(name).serviceDescriptor")
            try self.videoSettings?.validate(name: "\(name).videoSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case preferredChannelPipeline = "preferredChannelPipeline"
            case programNumber = "programNumber"
            case serviceDescriptor = "serviceDescriptor"
            case videoSettings = "videoSettings"
        }
    }

    public struct MultiplexProgramSummary: AWSDecodableShape {
        /// The MediaLive Channel associated with the program.
        public let channelId: String?
        /// The name of the multiplex program.
        public let programName: String?

        @inlinable
        public init(channelId: String? = nil, programName: String? = nil) {
            self.channelId = channelId
            self.programName = programName
        }

        private enum CodingKeys: String, CodingKey {
            case channelId = "channelId"
            case programName = "programName"
        }
    }

    public struct MultiplexSettings: AWSEncodableShape & AWSDecodableShape {
        /// Maximum video buffer delay in milliseconds.
        public let maximumVideoBufferDelayMilliseconds: Int?
        /// Transport stream bit rate.
        public let transportStreamBitrate: Int?
        /// Transport stream ID.
        public let transportStreamId: Int?
        /// Transport stream reserved bit rate.
        public let transportStreamReservedBitrate: Int?

        @inlinable
        public init(maximumVideoBufferDelayMilliseconds: Int? = nil, transportStreamBitrate: Int? = nil, transportStreamId: Int? = nil, transportStreamReservedBitrate: Int? = nil) {
            self.maximumVideoBufferDelayMilliseconds = maximumVideoBufferDelayMilliseconds
            self.transportStreamBitrate = transportStreamBitrate
            self.transportStreamId = transportStreamId
            self.transportStreamReservedBitrate = transportStreamReservedBitrate
        }

        public func validate(name: String) throws {
            try self.validate(self.maximumVideoBufferDelayMilliseconds, name: "maximumVideoBufferDelayMilliseconds", parent: name, max: 3000)
            try self.validate(self.maximumVideoBufferDelayMilliseconds, name: "maximumVideoBufferDelayMilliseconds", parent: name, min: 800)
            try self.validate(self.transportStreamBitrate, name: "transportStreamBitrate", parent: name, max: 100000000)
            try self.validate(self.transportStreamBitrate, name: "transportStreamBitrate", parent: name, min: 1000000)
            try self.validate(self.transportStreamId, name: "transportStreamId", parent: name, max: 65535)
            try self.validate(self.transportStreamId, name: "transportStreamId", parent: name, min: 0)
            try self.validate(self.transportStreamReservedBitrate, name: "transportStreamReservedBitrate", parent: name, max: 100000000)
            try self.validate(self.transportStreamReservedBitrate, name: "transportStreamReservedBitrate", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case maximumVideoBufferDelayMilliseconds = "maximumVideoBufferDelayMilliseconds"
            case transportStreamBitrate = "transportStreamBitrate"
            case transportStreamId = "transportStreamId"
            case transportStreamReservedBitrate = "transportStreamReservedBitrate"
        }
    }

    public struct MultiplexSettingsSummary: AWSDecodableShape {
        /// Transport stream bit rate.
        public let transportStreamBitrate: Int?

        @inlinable
        public init(transportStreamBitrate: Int? = nil) {
            self.transportStreamBitrate = transportStreamBitrate
        }

        private enum CodingKeys: String, CodingKey {
            case transportStreamBitrate = "transportStreamBitrate"
        }
    }

    public struct MultiplexStatmuxVideoSettings: AWSEncodableShape & AWSDecodableShape {
        /// Maximum statmux bitrate.
        public let maximumBitrate: Int?
        /// Minimum statmux bitrate.
        public let minimumBitrate: Int?
        /// The purpose of the priority is to use a combination of the\nmultiplex rate control algorithm and the QVBR capability of the\nencoder to prioritize the video quality of some channels in a\nmultiplex over others. Channels that have a higher priority will\nget higher video quality at the expense of the video quality of\nother channels in the multiplex with lower priority.
        public let priority: Int?

        @inlinable
        public init(maximumBitrate: Int? = nil, minimumBitrate: Int? = nil, priority: Int? = nil) {
            self.maximumBitrate = maximumBitrate
            self.minimumBitrate = minimumBitrate
            self.priority = priority
        }

        public func validate(name: String) throws {
            try self.validate(self.maximumBitrate, name: "maximumBitrate", parent: name, max: 100000000)
            try self.validate(self.maximumBitrate, name: "maximumBitrate", parent: name, min: 100000)
            try self.validate(self.minimumBitrate, name: "minimumBitrate", parent: name, max: 100000000)
            try self.validate(self.minimumBitrate, name: "minimumBitrate", parent: name, min: 100000)
            try self.validate(self.priority, name: "priority", parent: name, max: 5)
            try self.validate(self.priority, name: "priority", parent: name, min: -5)
        }

        private enum CodingKeys: String, CodingKey {
            case maximumBitrate = "maximumBitrate"
            case minimumBitrate = "minimumBitrate"
            case priority = "priority"
        }
    }

    public struct MultiplexSummary: AWSDecodableShape {
        /// The unique arn of the multiplex.
        public let arn: String?
        /// A list of availability zones for the multiplex.
        public let availabilityZones: [String]?
        /// The unique id of the multiplex.
        public let id: String?
        /// Configuration for a multiplex event.
        public let multiplexSettings: MultiplexSettingsSummary?
        /// The name of the multiplex.
        public let name: String?
        /// The number of currently healthy pipelines.
        public let pipelinesRunningCount: Int?
        /// The number of programs in the multiplex.
        public let programCount: Int?
        /// The current state of the multiplex.
        public let state: MultiplexState?
        /// A collection of key-value pairs.
        public let tags: [String: String]?

        @inlinable
        public init(arn: String? = nil, availabilityZones: [String]? = nil, id: String? = nil, multiplexSettings: MultiplexSettingsSummary? = nil, name: String? = nil, pipelinesRunningCount: Int? = nil, programCount: Int? = nil, state: MultiplexState? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.availabilityZones = availabilityZones
            self.id = id
            self.multiplexSettings = multiplexSettings
            self.name = name
            self.pipelinesRunningCount = pipelinesRunningCount
            self.programCount = programCount
            self.state = state
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case availabilityZones = "availabilityZones"
            case id = "id"
            case multiplexSettings = "multiplexSettings"
            case name = "name"
            case pipelinesRunningCount = "pipelinesRunningCount"
            case programCount = "programCount"
            case state = "state"
            case tags = "tags"
        }
    }

    public struct MultiplexVideoSettings: AWSEncodableShape & AWSDecodableShape {
        /// The constant bitrate configuration for the video encode.
        /// When this field is defined, StatmuxSettings must be undefined.
        public let constantBitrate: Int?
        /// Statmux rate control settings.
        /// When this field is defined, ConstantBitrate must be undefined.
        public let statmuxSettings: MultiplexStatmuxVideoSettings?

        @inlinable
        public init(constantBitrate: Int? = nil, statmuxSettings: MultiplexStatmuxVideoSettings? = nil) {
            self.constantBitrate = constantBitrate
            self.statmuxSettings = statmuxSettings
        }

        public func validate(name: String) throws {
            try self.validate(self.constantBitrate, name: "constantBitrate", parent: name, max: 100000000)
            try self.validate(self.constantBitrate, name: "constantBitrate", parent: name, min: 100000)
            try self.statmuxSettings?.validate(name: "\(name).statmuxSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case constantBitrate = "constantBitrate"
            case statmuxSettings = "statmuxSettings"
        }
    }

    public struct NetworkInputSettings: AWSEncodableShape & AWSDecodableShape {
        /// Specifies HLS input settings when the uri is for a HLS manifest.
        public let hlsInputSettings: HlsInputSettings?
        /// Specifies multicast input settings when the uri is for a multicast event.
        public let multicastInputSettings: MulticastInputSettings?
        /// Check HTTPS server certificates. When set to checkCryptographyOnly, cryptography in the certificate will be checked, but not the server's name. Certain subdomains (notably S3 buckets that use dots in the bucket name) do not strictly match the corresponding certificate's wildcard pattern and would otherwise cause the event to error. This setting is ignored for protocols that do not use https.
        public let serverValidation: NetworkInputServerValidation?

        @inlinable
        public init(hlsInputSettings: HlsInputSettings? = nil, multicastInputSettings: MulticastInputSettings? = nil, serverValidation: NetworkInputServerValidation? = nil) {
            self.hlsInputSettings = hlsInputSettings
            self.multicastInputSettings = multicastInputSettings
            self.serverValidation = serverValidation
        }

        public func validate(name: String) throws {
            try self.hlsInputSettings?.validate(name: "\(name).hlsInputSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case hlsInputSettings = "hlsInputSettings"
            case multicastInputSettings = "multicastInputSettings"
            case serverValidation = "serverValidation"
        }
    }

    public struct NielsenCBET: AWSEncodableShape & AWSDecodableShape {
        /// Enter the CBET check digits to use in the watermark.
        public let cbetCheckDigitString: String?
        /// Determines the method of CBET insertion mode when prior encoding is detected on the same layer.
        public let cbetStepaside: NielsenWatermarksCbetStepaside?
        /// Enter the CBET Source ID (CSID) to use in the watermark
        public let csid: String?

        @inlinable
        public init(cbetCheckDigitString: String? = nil, cbetStepaside: NielsenWatermarksCbetStepaside? = nil, csid: String? = nil) {
            self.cbetCheckDigitString = cbetCheckDigitString
            self.cbetStepaside = cbetStepaside
            self.csid = csid
        }

        public func validate(name: String) throws {
            try self.validate(self.cbetCheckDigitString, name: "cbetCheckDigitString", parent: name, max: 2)
            try self.validate(self.cbetCheckDigitString, name: "cbetCheckDigitString", parent: name, min: 2)
            try self.validate(self.csid, name: "csid", parent: name, max: 7)
            try self.validate(self.csid, name: "csid", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case cbetCheckDigitString = "cbetCheckDigitString"
            case cbetStepaside = "cbetStepaside"
            case csid = "csid"
        }
    }

    public struct NielsenConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// Enter the Distributor ID assigned to your organization by Nielsen.
        public let distributorId: String?
        /// Enables Nielsen PCM to ID3 tagging
        public let nielsenPcmToId3Tagging: NielsenPcmToId3TaggingState?

        @inlinable
        public init(distributorId: String? = nil, nielsenPcmToId3Tagging: NielsenPcmToId3TaggingState? = nil) {
            self.distributorId = distributorId
            self.nielsenPcmToId3Tagging = nielsenPcmToId3Tagging
        }

        private enum CodingKeys: String, CodingKey {
            case distributorId = "distributorId"
            case nielsenPcmToId3Tagging = "nielsenPcmToId3Tagging"
        }
    }

    public struct NielsenNaesIiNw: AWSEncodableShape & AWSDecodableShape {
        /// Enter the check digit string for the watermark
        public let checkDigitString: String?
        /// Enter the Nielsen Source ID (SID) to include in the watermark
        public let sid: Double?
        /// Choose the timezone for the time stamps in the watermark. If not provided,
        /// the timestamps will be in Coordinated Universal Time (UTC)
        public let timezone: NielsenWatermarkTimezones?

        @inlinable
        public init(checkDigitString: String? = nil, sid: Double? = nil, timezone: NielsenWatermarkTimezones? = nil) {
            self.checkDigitString = checkDigitString
            self.sid = sid
            self.timezone = timezone
        }

        public func validate(name: String) throws {
            try self.validate(self.checkDigitString, name: "checkDigitString", parent: name, max: 2)
            try self.validate(self.checkDigitString, name: "checkDigitString", parent: name, min: 2)
        }

        private enum CodingKeys: String, CodingKey {
            case checkDigitString = "checkDigitString"
            case sid = "sid"
            case timezone = "timezone"
        }
    }

    public struct NielsenWatermarksSettings: AWSEncodableShape & AWSDecodableShape {
        /// Complete these fields only if you want to insert watermarks of type Nielsen CBET
        public let nielsenCbetSettings: NielsenCBET?
        /// Choose the distribution types that you want to assign to the watermarks:
        /// - PROGRAM_CONTENT
        /// - FINAL_DISTRIBUTOR
        public let nielsenDistributionType: NielsenWatermarksDistributionTypes?
        /// Complete these fields only if you want to insert watermarks of type Nielsen NAES II (N2) and Nielsen NAES VI (NW).
        public let nielsenNaesIiNwSettings: NielsenNaesIiNw?

        @inlinable
        public init(nielsenCbetSettings: NielsenCBET? = nil, nielsenDistributionType: NielsenWatermarksDistributionTypes? = nil, nielsenNaesIiNwSettings: NielsenNaesIiNw? = nil) {
            self.nielsenCbetSettings = nielsenCbetSettings
            self.nielsenDistributionType = nielsenDistributionType
            self.nielsenNaesIiNwSettings = nielsenNaesIiNwSettings
        }

        public func validate(name: String) throws {
            try self.nielsenCbetSettings?.validate(name: "\(name).nielsenCbetSettings")
            try self.nielsenNaesIiNwSettings?.validate(name: "\(name).nielsenNaesIiNwSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case nielsenCbetSettings = "nielsenCbetSettings"
            case nielsenDistributionType = "nielsenDistributionType"
            case nielsenNaesIiNwSettings = "nielsenNaesIiNwSettings"
        }
    }

    public struct NodeInterfaceMapping: AWSEncodableShape & AWSDecodableShape {
        /// A uniform logical interface name to address in a MediaLive channel configuration.
        public let logicalInterfaceName: String?
        public let networkInterfaceMode: NetworkInterfaceMode?
        /// The name of the physical interface on the hardware that will be running Elemental anywhere.
        public let physicalInterfaceName: String?

        @inlinable
        public init(logicalInterfaceName: String? = nil, networkInterfaceMode: NetworkInterfaceMode? = nil, physicalInterfaceName: String? = nil) {
            self.logicalInterfaceName = logicalInterfaceName
            self.networkInterfaceMode = networkInterfaceMode
            self.physicalInterfaceName = physicalInterfaceName
        }

        private enum CodingKeys: String, CodingKey {
            case logicalInterfaceName = "logicalInterfaceName"
            case networkInterfaceMode = "networkInterfaceMode"
            case physicalInterfaceName = "physicalInterfaceName"
        }
    }

    public struct NodeInterfaceMappingCreateRequest: AWSEncodableShape {
        /// Specify one of the logicalInterfaceNames that you created in the Cluster that this node belongs to. For example, my-Inputs-Interface.
        public let logicalInterfaceName: String?
        /// The style of the network -- NAT or BRIDGE.
        public let networkInterfaceMode: NetworkInterfaceMode?
        /// Specify the physical name that corresponds to the logicalInterfaceName that you specified in this interface mapping. For example, Eth1 or ENO1234EXAMPLE.
        public let physicalInterfaceName: String?

        @inlinable
        public init(logicalInterfaceName: String? = nil, networkInterfaceMode: NetworkInterfaceMode? = nil, physicalInterfaceName: String? = nil) {
            self.logicalInterfaceName = logicalInterfaceName
            self.networkInterfaceMode = networkInterfaceMode
            self.physicalInterfaceName = physicalInterfaceName
        }

        private enum CodingKeys: String, CodingKey {
            case logicalInterfaceName = "logicalInterfaceName"
            case networkInterfaceMode = "networkInterfaceMode"
            case physicalInterfaceName = "physicalInterfaceName"
        }
    }

    public struct Offering: AWSDecodableShape {
        /// Unique offering ARN, e.g. 'arn:aws:medialive:us-west-2:123456789012:offering:87654321'
        public let arn: String?
        /// Currency code for usagePrice and fixedPrice in ISO-4217 format, e.g. 'USD'
        public let currencyCode: String?
        /// Lease duration, e.g. '12'
        public let duration: Int?
        /// Units for duration, e.g. 'MONTHS'
        public let durationUnits: OfferingDurationUnits?
        /// One-time charge for each reserved resource, e.g. '0.0' for a NO_UPFRONT offering
        public let fixedPrice: Double?
        /// Offering description, e.g. 'HD AVC output at 10-20 Mbps, 30 fps, and standard VQ in US West (Oregon)'
        public let offeringDescription: String?
        /// Unique offering ID, e.g. '87654321'
        public let offeringId: String?
        /// Offering type, e.g. 'NO_UPFRONT'
        public let offeringType: OfferingType?
        /// AWS region, e.g. 'us-west-2'
        public let region: String?
        /// Resource configuration details
        public let resourceSpecification: ReservationResourceSpecification?
        /// Recurring usage charge for each reserved resource, e.g. '157.0'
        public let usagePrice: Double?

        @inlinable
        public init(arn: String? = nil, currencyCode: String? = nil, duration: Int? = nil, durationUnits: OfferingDurationUnits? = nil, fixedPrice: Double? = nil, offeringDescription: String? = nil, offeringId: String? = nil, offeringType: OfferingType? = nil, region: String? = nil, resourceSpecification: ReservationResourceSpecification? = nil, usagePrice: Double? = nil) {
            self.arn = arn
            self.currencyCode = currencyCode
            self.duration = duration
            self.durationUnits = durationUnits
            self.fixedPrice = fixedPrice
            self.offeringDescription = offeringDescription
            self.offeringId = offeringId
            self.offeringType = offeringType
            self.region = region
            self.resourceSpecification = resourceSpecification
            self.usagePrice = usagePrice
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case currencyCode = "currencyCode"
            case duration = "duration"
            case durationUnits = "durationUnits"
            case fixedPrice = "fixedPrice"
            case offeringDescription = "offeringDescription"
            case offeringId = "offeringId"
            case offeringType = "offeringType"
            case region = "region"
            case resourceSpecification = "resourceSpecification"
            case usagePrice = "usagePrice"
        }
    }

    public struct Output: AWSEncodableShape & AWSDecodableShape {
        /// The names of the AudioDescriptions used as audio sources for this output.
        public let audioDescriptionNames: [String]?
        /// The names of the CaptionDescriptions used as caption sources for this output.
        public let captionDescriptionNames: [String]?
        /// The name used to identify an output.
        public let outputName: String?
        /// Output type-specific settings.
        public let outputSettings: OutputSettings?
        /// The name of the VideoDescription used as the source for this output.
        public let videoDescriptionName: String?

        @inlinable
        public init(audioDescriptionNames: [String]? = nil, captionDescriptionNames: [String]? = nil, outputName: String? = nil, outputSettings: OutputSettings? = nil, videoDescriptionName: String? = nil) {
            self.audioDescriptionNames = audioDescriptionNames
            self.captionDescriptionNames = captionDescriptionNames
            self.outputName = outputName
            self.outputSettings = outputSettings
            self.videoDescriptionName = videoDescriptionName
        }

        public func validate(name: String) throws {
            try self.validate(self.outputName, name: "outputName", parent: name, max: 255)
            try self.validate(self.outputName, name: "outputName", parent: name, min: 1)
            try self.outputSettings?.validate(name: "\(name).outputSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case audioDescriptionNames = "audioDescriptionNames"
            case captionDescriptionNames = "captionDescriptionNames"
            case outputName = "outputName"
            case outputSettings = "outputSettings"
            case videoDescriptionName = "videoDescriptionName"
        }
    }

    public struct OutputDestination: AWSEncodableShape & AWSDecodableShape {
        /// User-specified id. This is used in an output group or an output.
        public let id: String?
        /// Optional assignment of an output to a logical interface on the Node. Only applies to on premises channels.
        public let logicalInterfaceNames: [String]?
        /// Destination settings for a MediaPackage output; one destination for both encoders.
        public let mediaPackageSettings: [MediaPackageOutputDestinationSettings]?
        /// Destination settings for a Multiplex output; one destination for both encoders.
        public let multiplexSettings: MultiplexProgramChannelDestinationSettings?
        /// Destination settings for a standard output; one destination for each redundant encoder.
        public let settings: [OutputDestinationSettings]?
        /// SRT settings for an SRT output; one destination for each redundant encoder.
        public let srtSettings: [SrtOutputDestinationSettings]?

        @inlinable
        public init(id: String? = nil, logicalInterfaceNames: [String]? = nil, mediaPackageSettings: [MediaPackageOutputDestinationSettings]? = nil, multiplexSettings: MultiplexProgramChannelDestinationSettings? = nil, settings: [OutputDestinationSettings]? = nil, srtSettings: [SrtOutputDestinationSettings]? = nil) {
            self.id = id
            self.logicalInterfaceNames = logicalInterfaceNames
            self.mediaPackageSettings = mediaPackageSettings
            self.multiplexSettings = multiplexSettings
            self.settings = settings
            self.srtSettings = srtSettings
        }

        public func validate(name: String) throws {
            try self.mediaPackageSettings?.forEach {
                try $0.validate(name: "\(name).mediaPackageSettings[]")
            }
            try self.multiplexSettings?.validate(name: "\(name).multiplexSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case id = "id"
            case logicalInterfaceNames = "logicalInterfaceNames"
            case mediaPackageSettings = "mediaPackageSettings"
            case multiplexSettings = "multiplexSettings"
            case settings = "settings"
            case srtSettings = "srtSettings"
        }
    }

    public struct OutputDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        /// key used to extract the password from EC2 Parameter store
        public let passwordParam: String?
        /// Stream name for RTMP destinations (URLs of type rtmp://)
        public let streamName: String?
        /// A URL specifying a destination
        public let url: String?
        /// username for destination
        public let username: String?

        @inlinable
        public init(passwordParam: String? = nil, streamName: String? = nil, url: String? = nil, username: String? = nil) {
            self.passwordParam = passwordParam
            self.streamName = streamName
            self.url = url
            self.username = username
        }

        private enum CodingKeys: String, CodingKey {
            case passwordParam = "passwordParam"
            case streamName = "streamName"
            case url = "url"
            case username = "username"
        }
    }

    public struct OutputGroup: AWSEncodableShape & AWSDecodableShape {
        /// Custom output group name optionally defined by the user.
        public let name: String?
        /// Settings associated with the output group.
        public let outputGroupSettings: OutputGroupSettings?
        public let outputs: [Output]?

        @inlinable
        public init(name: String? = nil, outputGroupSettings: OutputGroupSettings? = nil, outputs: [Output]? = nil) {
            self.name = name
            self.outputGroupSettings = outputGroupSettings
            self.outputs = outputs
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 32)
            try self.outputGroupSettings?.validate(name: "\(name).outputGroupSettings")
            try self.outputs?.forEach {
                try $0.validate(name: "\(name).outputs[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case name = "name"
            case outputGroupSettings = "outputGroupSettings"
            case outputs = "outputs"
        }
    }

    public struct OutputGroupSettings: AWSEncodableShape & AWSDecodableShape {
        public let archiveGroupSettings: ArchiveGroupSettings?
        public let cmafIngestGroupSettings: CmafIngestGroupSettings?
        public let frameCaptureGroupSettings: FrameCaptureGroupSettings?
        public let hlsGroupSettings: HlsGroupSettings?
        public let mediaPackageGroupSettings: MediaPackageGroupSettings?
        public let msSmoothGroupSettings: MsSmoothGroupSettings?
        public let multiplexGroupSettings: MultiplexGroupSettings?
        public let rtmpGroupSettings: RtmpGroupSettings?
        public let srtGroupSettings: SrtGroupSettings?
        public let udpGroupSettings: UdpGroupSettings?

        @inlinable
        public init(archiveGroupSettings: ArchiveGroupSettings? = nil, cmafIngestGroupSettings: CmafIngestGroupSettings? = nil, frameCaptureGroupSettings: FrameCaptureGroupSettings? = nil, hlsGroupSettings: HlsGroupSettings? = nil, mediaPackageGroupSettings: MediaPackageGroupSettings? = nil, msSmoothGroupSettings: MsSmoothGroupSettings? = nil, multiplexGroupSettings: MultiplexGroupSettings? = nil, rtmpGroupSettings: RtmpGroupSettings? = nil, srtGroupSettings: SrtGroupSettings? = nil, udpGroupSettings: UdpGroupSettings? = nil) {
            self.archiveGroupSettings = archiveGroupSettings
            self.cmafIngestGroupSettings = cmafIngestGroupSettings
            self.frameCaptureGroupSettings = frameCaptureGroupSettings
            self.hlsGroupSettings = hlsGroupSettings
            self.mediaPackageGroupSettings = mediaPackageGroupSettings
            self.msSmoothGroupSettings = msSmoothGroupSettings
            self.multiplexGroupSettings = multiplexGroupSettings
            self.rtmpGroupSettings = rtmpGroupSettings
            self.srtGroupSettings = srtGroupSettings
            self.udpGroupSettings = udpGroupSettings
        }

        public func validate(name: String) throws {
            try self.archiveGroupSettings?.validate(name: "\(name).archiveGroupSettings")
            try self.cmafIngestGroupSettings?.validate(name: "\(name).cmafIngestGroupSettings")
            try self.hlsGroupSettings?.validate(name: "\(name).hlsGroupSettings")
            try self.mediaPackageGroupSettings?.validate(name: "\(name).mediaPackageGroupSettings")
            try self.msSmoothGroupSettings?.validate(name: "\(name).msSmoothGroupSettings")
            try self.rtmpGroupSettings?.validate(name: "\(name).rtmpGroupSettings")
            try self.udpGroupSettings?.validate(name: "\(name).udpGroupSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case archiveGroupSettings = "archiveGroupSettings"
            case cmafIngestGroupSettings = "cmafIngestGroupSettings"
            case frameCaptureGroupSettings = "frameCaptureGroupSettings"
            case hlsGroupSettings = "hlsGroupSettings"
            case mediaPackageGroupSettings = "mediaPackageGroupSettings"
            case msSmoothGroupSettings = "msSmoothGroupSettings"
            case multiplexGroupSettings = "multiplexGroupSettings"
            case rtmpGroupSettings = "rtmpGroupSettings"
            case srtGroupSettings = "srtGroupSettings"
            case udpGroupSettings = "udpGroupSettings"
        }
    }

    public struct OutputLocationRef: AWSEncodableShape & AWSDecodableShape {
        public let destinationRefId: String?

        @inlinable
        public init(destinationRefId: String? = nil) {
            self.destinationRefId = destinationRefId
        }

        private enum CodingKeys: String, CodingKey {
            case destinationRefId = "destinationRefId"
        }
    }

    public struct OutputLockingSettings: AWSEncodableShape & AWSDecodableShape {
        public let epochLockingSettings: EpochLockingSettings?
        public let pipelineLockingSettings: PipelineLockingSettings?

        @inlinable
        public init(epochLockingSettings: EpochLockingSettings? = nil, pipelineLockingSettings: PipelineLockingSettings? = nil) {
            self.epochLockingSettings = epochLockingSettings
            self.pipelineLockingSettings = pipelineLockingSettings
        }

        private enum CodingKeys: String, CodingKey {
            case epochLockingSettings = "epochLockingSettings"
            case pipelineLockingSettings = "pipelineLockingSettings"
        }
    }

    public struct OutputSettings: AWSEncodableShape & AWSDecodableShape {
        public let archiveOutputSettings: ArchiveOutputSettings?
        public let cmafIngestOutputSettings: CmafIngestOutputSettings?
        public let frameCaptureOutputSettings: FrameCaptureOutputSettings?
        public let hlsOutputSettings: HlsOutputSettings?
        public let mediaPackageOutputSettings: MediaPackageOutputSettings?
        public let msSmoothOutputSettings: MsSmoothOutputSettings?
        public let multiplexOutputSettings: MultiplexOutputSettings?
        public let rtmpOutputSettings: RtmpOutputSettings?
        public let srtOutputSettings: SrtOutputSettings?
        public let udpOutputSettings: UdpOutputSettings?

        @inlinable
        public init(archiveOutputSettings: ArchiveOutputSettings? = nil, cmafIngestOutputSettings: CmafIngestOutputSettings? = nil, frameCaptureOutputSettings: FrameCaptureOutputSettings? = nil, hlsOutputSettings: HlsOutputSettings? = nil, mediaPackageOutputSettings: MediaPackageOutputSettings? = nil, msSmoothOutputSettings: MsSmoothOutputSettings? = nil, multiplexOutputSettings: MultiplexOutputSettings? = nil, rtmpOutputSettings: RtmpOutputSettings? = nil, srtOutputSettings: SrtOutputSettings? = nil, udpOutputSettings: UdpOutputSettings? = nil) {
            self.archiveOutputSettings = archiveOutputSettings
            self.cmafIngestOutputSettings = cmafIngestOutputSettings
            self.frameCaptureOutputSettings = frameCaptureOutputSettings
            self.hlsOutputSettings = hlsOutputSettings
            self.mediaPackageOutputSettings = mediaPackageOutputSettings
            self.msSmoothOutputSettings = msSmoothOutputSettings
            self.multiplexOutputSettings = multiplexOutputSettings
            self.rtmpOutputSettings = rtmpOutputSettings
            self.srtOutputSettings = srtOutputSettings
            self.udpOutputSettings = udpOutputSettings
        }

        public func validate(name: String) throws {
            try self.archiveOutputSettings?.validate(name: "\(name).archiveOutputSettings")
            try self.hlsOutputSettings?.validate(name: "\(name).hlsOutputSettings")
            try self.multiplexOutputSettings?.validate(name: "\(name).multiplexOutputSettings")
            try self.rtmpOutputSettings?.validate(name: "\(name).rtmpOutputSettings")
            try self.srtOutputSettings?.validate(name: "\(name).srtOutputSettings")
            try self.udpOutputSettings?.validate(name: "\(name).udpOutputSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case archiveOutputSettings = "archiveOutputSettings"
            case cmafIngestOutputSettings = "cmafIngestOutputSettings"
            case frameCaptureOutputSettings = "frameCaptureOutputSettings"
            case hlsOutputSettings = "hlsOutputSettings"
            case mediaPackageOutputSettings = "mediaPackageOutputSettings"
            case msSmoothOutputSettings = "msSmoothOutputSettings"
            case multiplexOutputSettings = "multiplexOutputSettings"
            case rtmpOutputSettings = "rtmpOutputSettings"
            case srtOutputSettings = "srtOutputSettings"
            case udpOutputSettings = "udpOutputSettings"
        }
    }

    public struct PassThroughSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct PauseStateScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        public let pipelines: [PipelinePauseStateSettings]?

        @inlinable
        public init(pipelines: [PipelinePauseStateSettings]? = nil) {
            self.pipelines = pipelines
        }

        private enum CodingKeys: String, CodingKey {
            case pipelines = "pipelines"
        }
    }

    public struct PipelineDetail: AWSDecodableShape {
        /// The name of the active input attachment currently being ingested by this pipeline.
        public let activeInputAttachmentName: String?
        /// The name of the input switch schedule action that occurred most recently and that resulted in the switch to the current input attachment for this pipeline.
        public let activeInputSwitchActionName: String?
        /// The name of the motion graphics activate action that occurred most recently and that resulted in the current graphics URI for this pipeline.
        public let activeMotionGraphicsActionName: String?
        /// The current URI being used for HTML5 motion graphics for this pipeline.
        public let activeMotionGraphicsUri: String?
        /// Current engine version of the encoder for this pipeline.
        public let channelEngineVersion: ChannelEngineVersionResponse?
        /// Pipeline ID
        public let pipelineId: String?

        @inlinable
        public init(activeInputAttachmentName: String? = nil, activeInputSwitchActionName: String? = nil, activeMotionGraphicsActionName: String? = nil, activeMotionGraphicsUri: String? = nil, channelEngineVersion: ChannelEngineVersionResponse? = nil, pipelineId: String? = nil) {
            self.activeInputAttachmentName = activeInputAttachmentName
            self.activeInputSwitchActionName = activeInputSwitchActionName
            self.activeMotionGraphicsActionName = activeMotionGraphicsActionName
            self.activeMotionGraphicsUri = activeMotionGraphicsUri
            self.channelEngineVersion = channelEngineVersion
            self.pipelineId = pipelineId
        }

        private enum CodingKeys: String, CodingKey {
            case activeInputAttachmentName = "activeInputAttachmentName"
            case activeInputSwitchActionName = "activeInputSwitchActionName"
            case activeMotionGraphicsActionName = "activeMotionGraphicsActionName"
            case activeMotionGraphicsUri = "activeMotionGraphicsUri"
            case channelEngineVersion = "channelEngineVersion"
            case pipelineId = "pipelineId"
        }
    }

    public struct PipelineLockingSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct PipelinePauseStateSettings: AWSEncodableShape & AWSDecodableShape {
        /// Pipeline ID to pause ("PIPELINE_0" or "PIPELINE_1").
        public let pipelineId: PipelineId?

        @inlinable
        public init(pipelineId: PipelineId? = nil) {
            self.pipelineId = pipelineId
        }

        private enum CodingKeys: String, CodingKey {
            case pipelineId = "pipelineId"
        }
    }

    public struct PurchaseOfferingRequest: AWSEncodableShape {
        /// Number of resources
        public let count: Int?
        /// Name for the new reservation
        public let name: String?
        /// Offering to purchase, e.g. '87654321'
        public let offeringId: String
        /// Renewal settings for the reservation
        public let renewalSettings: RenewalSettings?
        /// Unique request ID to be specified. This is needed to prevent retries from creating multiple resources.
        public let requestId: String?
        /// Requested reservation start time (UTC) in ISO-8601 format. The specified time must be between the first day of the current month and one year from now. If no value is given, the default is now.
        public let start: String?
        /// A collection of key-value pairs
        public let tags: [String: String]?

        @inlinable
        public init(count: Int? = nil, name: String? = nil, offeringId: String, renewalSettings: RenewalSettings? = nil, requestId: String? = PurchaseOfferingRequest.idempotencyToken(), start: String? = nil, tags: [String: String]? = nil) {
            self.count = count
            self.name = name
            self.offeringId = offeringId
            self.renewalSettings = renewalSettings
            self.requestId = requestId
            self.start = start
            self.tags = tags
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            try container.encodeIfPresent(self.count, forKey: .count)
            try container.encodeIfPresent(self.name, forKey: .name)
            request.encodePath(self.offeringId, key: "OfferingId")
            try container.encodeIfPresent(self.renewalSettings, forKey: .renewalSettings)
            try container.encodeIfPresent(self.requestId, forKey: .requestId)
            try container.encodeIfPresent(self.start, forKey: .start)
            try container.encodeIfPresent(self.tags, forKey: .tags)
        }

        public func validate(name: String) throws {
            try self.validate(self.count, name: "count", parent: name, min: 1)
            try self.renewalSettings?.validate(name: "\(name).renewalSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case count = "count"
            case name = "name"
            case renewalSettings = "renewalSettings"
            case requestId = "requestId"
            case start = "start"
            case tags = "tags"
        }
    }

    public struct PurchaseOfferingResponse: AWSDecodableShape {
        public let reservation: Reservation?

        @inlinable
        public init(reservation: Reservation? = nil) {
            self.reservation = reservation
        }

        private enum CodingKeys: String, CodingKey {
            case reservation = "reservation"
        }
    }

    public struct RawSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct RebootInputDeviceRequest: AWSEncodableShape {
        /// Force a reboot of an input device. If the device is streaming, it will stop streaming and begin rebooting within a few seconds of sending the command. If the device was streaming prior to the reboot, the device will resume streaming when the reboot completes.
        public let force: RebootInputDeviceForce?
        /// The unique ID of the input device to reboot. For example, hd-123456789abcdef.
        public let inputDeviceId: String

        @inlinable
        public init(force: RebootInputDeviceForce? = nil, inputDeviceId: String) {
            self.force = force
            self.inputDeviceId = inputDeviceId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            try container.encodeIfPresent(self.force, forKey: .force)
            request.encodePath(self.inputDeviceId, key: "InputDeviceId")
        }

        private enum CodingKeys: String, CodingKey {
            case force = "force"
        }
    }

    public struct RebootInputDeviceResponse: AWSDecodableShape {
        public init() {}
    }

    public struct Rec601Settings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct Rec709Settings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct RejectInputDeviceTransferRequest: AWSEncodableShape {
        /// The unique ID of the input device to reject. For example, hd-123456789abcdef.
        public let inputDeviceId: String

        @inlinable
        public init(inputDeviceId: String) {
            self.inputDeviceId = inputDeviceId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.inputDeviceId, key: "InputDeviceId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct RejectInputDeviceTransferResponse: AWSDecodableShape {
        public init() {}
    }

    public struct RemixSettings: AWSEncodableShape & AWSDecodableShape {
        /// Mapping of input channels to output channels, with appropriate gain adjustments.
        public let channelMappings: [AudioChannelMapping]?
        /// Number of input channels to be used.
        public let channelsIn: Int?
        /// Number of output channels to be produced.
        /// Valid values: 1, 2, 4, 6, 8
        public let channelsOut: Int?

        @inlinable
        public init(channelMappings: [AudioChannelMapping]? = nil, channelsIn: Int? = nil, channelsOut: Int? = nil) {
            self.channelMappings = channelMappings
            self.channelsIn = channelsIn
            self.channelsOut = channelsOut
        }

        public func validate(name: String) throws {
            try self.channelMappings?.forEach {
                try $0.validate(name: "\(name).channelMappings[]")
            }
            try self.validate(self.channelsIn, name: "channelsIn", parent: name, max: 16)
            try self.validate(self.channelsIn, name: "channelsIn", parent: name, min: 1)
            try self.validate(self.channelsOut, name: "channelsOut", parent: name, max: 8)
            try self.validate(self.channelsOut, name: "channelsOut", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case channelMappings = "channelMappings"
            case channelsIn = "channelsIn"
            case channelsOut = "channelsOut"
        }
    }

    public struct RenewalSettings: AWSEncodableShape & AWSDecodableShape {
        /// Automatic renewal status for the reservation
        public let automaticRenewal: ReservationAutomaticRenewal?
        /// Count for the reservation renewal
        public let renewalCount: Int?

        @inlinable
        public init(automaticRenewal: ReservationAutomaticRenewal? = nil, renewalCount: Int? = nil) {
            self.automaticRenewal = automaticRenewal
            self.renewalCount = renewalCount
        }

        public func validate(name: String) throws {
            try self.validate(self.renewalCount, name: "renewalCount", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case automaticRenewal = "automaticRenewal"
            case renewalCount = "renewalCount"
        }
    }

    public struct Reservation: AWSDecodableShape {
        /// Unique reservation ARN, e.g. 'arn:aws:medialive:us-west-2:123456789012:reservation:1234567'
        public let arn: String?
        /// Number of reserved resources
        public let count: Int?
        /// Currency code for usagePrice and fixedPrice in ISO-4217 format, e.g. 'USD'
        public let currencyCode: String?
        /// Lease duration, e.g. '12'
        public let duration: Int?
        /// Units for duration, e.g. 'MONTHS'
        public let durationUnits: OfferingDurationUnits?
        /// Reservation UTC end date and time in ISO-8601 format, e.g. '2019-03-01T00:00:00'
        public let end: String?
        /// One-time charge for each reserved resource, e.g. '0.0' for a NO_UPFRONT offering
        public let fixedPrice: Double?
        /// User specified reservation name
        public let name: String?
        /// Offering description, e.g. 'HD AVC output at 10-20 Mbps, 30 fps, and standard VQ in US West (Oregon)'
        public let offeringDescription: String?
        /// Unique offering ID, e.g. '87654321'
        public let offeringId: String?
        /// Offering type, e.g. 'NO_UPFRONT'
        public let offeringType: OfferingType?
        /// AWS region, e.g. 'us-west-2'
        public let region: String?
        /// Renewal settings for the reservation
        public let renewalSettings: RenewalSettings?
        /// Unique reservation ID, e.g. '1234567'
        public let reservationId: String?
        /// Resource configuration details
        public let resourceSpecification: ReservationResourceSpecification?
        /// Reservation UTC start date and time in ISO-8601 format, e.g. '2018-03-01T00:00:00'
        public let start: String?
        /// Current state of reservation, e.g. 'ACTIVE'
        public let state: ReservationState?
        /// A collection of key-value pairs
        public let tags: [String: String]?
        /// Recurring usage charge for each reserved resource, e.g. '157.0'
        public let usagePrice: Double?

        @inlinable
        public init(arn: String? = nil, count: Int? = nil, currencyCode: String? = nil, duration: Int? = nil, durationUnits: OfferingDurationUnits? = nil, end: String? = nil, fixedPrice: Double? = nil, name: String? = nil, offeringDescription: String? = nil, offeringId: String? = nil, offeringType: OfferingType? = nil, region: String? = nil, renewalSettings: RenewalSettings? = nil, reservationId: String? = nil, resourceSpecification: ReservationResourceSpecification? = nil, start: String? = nil, state: ReservationState? = nil, tags: [String: String]? = nil, usagePrice: Double? = nil) {
            self.arn = arn
            self.count = count
            self.currencyCode = currencyCode
            self.duration = duration
            self.durationUnits = durationUnits
            self.end = end
            self.fixedPrice = fixedPrice
            self.name = name
            self.offeringDescription = offeringDescription
            self.offeringId = offeringId
            self.offeringType = offeringType
            self.region = region
            self.renewalSettings = renewalSettings
            self.reservationId = reservationId
            self.resourceSpecification = resourceSpecification
            self.start = start
            self.state = state
            self.tags = tags
            self.usagePrice = usagePrice
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case count = "count"
            case currencyCode = "currencyCode"
            case duration = "duration"
            case durationUnits = "durationUnits"
            case end = "end"
            case fixedPrice = "fixedPrice"
            case name = "name"
            case offeringDescription = "offeringDescription"
            case offeringId = "offeringId"
            case offeringType = "offeringType"
            case region = "region"
            case renewalSettings = "renewalSettings"
            case reservationId = "reservationId"
            case resourceSpecification = "resourceSpecification"
            case start = "start"
            case state = "state"
            case tags = "tags"
            case usagePrice = "usagePrice"
        }
    }

    public struct ReservationResourceSpecification: AWSDecodableShape {
        /// Channel class, e.g. 'STANDARD'
        public let channelClass: ChannelClass?
        /// Codec, e.g. 'AVC'
        public let codec: ReservationCodec?
        /// Maximum bitrate, e.g. 'MAX_20_MBPS'
        public let maximumBitrate: ReservationMaximumBitrate?
        /// Maximum framerate, e.g. 'MAX_30_FPS' (Outputs only)
        public let maximumFramerate: ReservationMaximumFramerate?
        /// Resolution, e.g. 'HD'
        public let resolution: ReservationResolution?
        /// Resource type, 'INPUT', 'OUTPUT', 'MULTIPLEX', or 'CHANNEL'
        public let resourceType: ReservationResourceType?
        /// Special feature, e.g. 'AUDIO_NORMALIZATION' (Channels only)
        public let specialFeature: ReservationSpecialFeature?
        /// Video quality, e.g. 'STANDARD' (Outputs only)
        public let videoQuality: ReservationVideoQuality?

        @inlinable
        public init(channelClass: ChannelClass? = nil, codec: ReservationCodec? = nil, maximumBitrate: ReservationMaximumBitrate? = nil, maximumFramerate: ReservationMaximumFramerate? = nil, resolution: ReservationResolution? = nil, resourceType: ReservationResourceType? = nil, specialFeature: ReservationSpecialFeature? = nil, videoQuality: ReservationVideoQuality? = nil) {
            self.channelClass = channelClass
            self.codec = codec
            self.maximumBitrate = maximumBitrate
            self.maximumFramerate = maximumFramerate
            self.resolution = resolution
            self.resourceType = resourceType
            self.specialFeature = specialFeature
            self.videoQuality = videoQuality
        }

        private enum CodingKeys: String, CodingKey {
            case channelClass = "channelClass"
            case codec = "codec"
            case maximumBitrate = "maximumBitrate"
            case maximumFramerate = "maximumFramerate"
            case resolution = "resolution"
            case resourceType = "resourceType"
            case specialFeature = "specialFeature"
            case videoQuality = "videoQuality"
        }
    }

    public struct RestartChannelPipelinesRequest: AWSEncodableShape {
        /// ID of channel
        public let channelId: String
        /// An array of pipelines to restart in this channel. Format PIPELINE_0 or PIPELINE_1.
        public let pipelineIds: [ChannelPipelineIdToRestart]?

        @inlinable
        public init(channelId: String, pipelineIds: [ChannelPipelineIdToRestart]? = nil) {
            self.channelId = channelId
            self.pipelineIds = pipelineIds
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.channelId, key: "ChannelId")
            try container.encodeIfPresent(self.pipelineIds, forKey: .pipelineIds)
        }

        private enum CodingKeys: String, CodingKey {
            case pipelineIds = "pipelineIds"
        }
    }

    public struct RestartChannelPipelinesResponse: AWSDecodableShape {
        /// Anywhere settings for this channel.
        public let anywhereSettings: DescribeAnywhereSettings?
        /// The unique arn of the channel.
        public let arn: String?
        /// Specification of CDI inputs for this channel
        public let cdiInputSpecification: CdiInputSpecification?
        /// The class for this channel. STANDARD for a channel with two pipelines or SINGLE_PIPELINE for a channel with one pipeline.
        public let channelClass: ChannelClass?
        /// Requested engine version for this channel.
        public let channelEngineVersion: ChannelEngineVersionResponse?
        /// A list of destinations of the channel. For UDP outputs, there is one
        /// destination per output. For other types (HLS, for example), there is
        /// one destination per packager.
        public let destinations: [OutputDestination]?
        /// The endpoints where outgoing connections initiate from
        public let egressEndpoints: [ChannelEgressEndpoint]?
        public let encoderSettings: EncoderSettings?
        /// The unique id of the channel.
        public let id: String?
        /// List of input attachments for channel.
        public let inputAttachments: [InputAttachment]?
        /// Specification of network and file inputs for this channel
        public let inputSpecification: InputSpecification?
        /// The log level being written to CloudWatch Logs.
        public let logLevel: LogLevel?
        /// Maintenance settings for this channel.
        public let maintenance: MaintenanceStatus?
        /// The time in milliseconds by when the PVRE restart must occur.
        public let maintenanceStatus: String?
        /// The name of the channel. (user-mutable)
        public let name: String?
        /// Runtime details for the pipelines of a running channel.
        public let pipelineDetails: [PipelineDetail]?
        /// The number of currently healthy pipelines.
        public let pipelinesRunningCount: Int?
        /// The Amazon Resource Name (ARN) of the role assumed when running the Channel.
        public let roleArn: String?
        public let state: ChannelState?
        /// A collection of key-value pairs.
        public let tags: [String: String]?
        /// Settings for VPC output
        public let vpc: VpcOutputSettingsDescription?

        @inlinable
        public init(anywhereSettings: DescribeAnywhereSettings? = nil, arn: String? = nil, cdiInputSpecification: CdiInputSpecification? = nil, channelClass: ChannelClass? = nil, channelEngineVersion: ChannelEngineVersionResponse? = nil, destinations: [OutputDestination]? = nil, egressEndpoints: [ChannelEgressEndpoint]? = nil, encoderSettings: EncoderSettings? = nil, id: String? = nil, inputAttachments: [InputAttachment]? = nil, inputSpecification: InputSpecification? = nil, logLevel: LogLevel? = nil, maintenance: MaintenanceStatus? = nil, maintenanceStatus: String? = nil, name: String? = nil, pipelineDetails: [PipelineDetail]? = nil, pipelinesRunningCount: Int? = nil, roleArn: String? = nil, state: ChannelState? = nil, tags: [String: String]? = nil, vpc: VpcOutputSettingsDescription? = nil) {
            self.anywhereSettings = anywhereSettings
            self.arn = arn
            self.cdiInputSpecification = cdiInputSpecification
            self.channelClass = channelClass
            self.channelEngineVersion = channelEngineVersion
            self.destinations = destinations
            self.egressEndpoints = egressEndpoints
            self.encoderSettings = encoderSettings
            self.id = id
            self.inputAttachments = inputAttachments
            self.inputSpecification = inputSpecification
            self.logLevel = logLevel
            self.maintenance = maintenance
            self.maintenanceStatus = maintenanceStatus
            self.name = name
            self.pipelineDetails = pipelineDetails
            self.pipelinesRunningCount = pipelinesRunningCount
            self.roleArn = roleArn
            self.state = state
            self.tags = tags
            self.vpc = vpc
        }

        private enum CodingKeys: String, CodingKey {
            case anywhereSettings = "anywhereSettings"
            case arn = "arn"
            case cdiInputSpecification = "cdiInputSpecification"
            case channelClass = "channelClass"
            case channelEngineVersion = "channelEngineVersion"
            case destinations = "destinations"
            case egressEndpoints = "egressEndpoints"
            case encoderSettings = "encoderSettings"
            case id = "id"
            case inputAttachments = "inputAttachments"
            case inputSpecification = "inputSpecification"
            case logLevel = "logLevel"
            case maintenance = "maintenance"
            case maintenanceStatus = "maintenanceStatus"
            case name = "name"
            case pipelineDetails = "pipelineDetails"
            case pipelinesRunningCount = "pipelinesRunningCount"
            case roleArn = "roleArn"
            case state = "state"
            case tags = "tags"
            case vpc = "vpc"
        }
    }

    public struct Route: AWSDecodableShape {
        /// A CIDR block for one Route.
        public let cidr: String?
        /// The IP address of the Gateway for this route, if applicable.
        public let gateway: String?

        @inlinable
        public init(cidr: String? = nil, gateway: String? = nil) {
            self.cidr = cidr
            self.gateway = gateway
        }

        private enum CodingKeys: String, CodingKey {
            case cidr = "cidr"
            case gateway = "gateway"
        }
    }

    public struct RouteCreateRequest: AWSEncodableShape {
        /// A CIDR block for one Route.
        public let cidr: String?
        /// The IP address of the Gateway for this route, if applicable.
        public let gateway: String?

        @inlinable
        public init(cidr: String? = nil, gateway: String? = nil) {
            self.cidr = cidr
            self.gateway = gateway
        }

        private enum CodingKeys: String, CodingKey {
            case cidr = "cidr"
            case gateway = "gateway"
        }
    }

    public struct RouteUpdateRequest: AWSEncodableShape {
        /// A CIDR block for one Route.
        public let cidr: String?
        /// The IP address of the Gateway for this route, if applicable.
        public let gateway: String?

        @inlinable
        public init(cidr: String? = nil, gateway: String? = nil) {
            self.cidr = cidr
            self.gateway = gateway
        }

        private enum CodingKeys: String, CodingKey {
            case cidr = "cidr"
            case gateway = "gateway"
        }
    }

    public struct RtmpCaptionInfoDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct RtmpGroupSettings: AWSEncodableShape & AWSDecodableShape {
        /// Choose the ad marker type for this output group. MediaLive will create a message based on the content of each SCTE-35 message, format it for that marker type, and insert it in the datastream.
        public let adMarkers: [RtmpAdMarkers]?
        /// Authentication scheme to use when connecting with CDN
        public let authenticationScheme: AuthenticationScheme?
        /// Controls behavior when content cache fills up. If remote origin server stalls the RTMP connection and does not accept content fast enough the 'Media Cache' will fill up. When the cache reaches the duration specified by cacheLength the cache will stop accepting new content. If set to disconnectImmediately, the RTMP output will force a disconnect. Clear the media cache, and reconnect after restartDelay seconds. If set to waitForServer, the RTMP output will wait up to 5 minutes to allow the origin server to begin accepting data again.
        public let cacheFullBehavior: RtmpCacheFullBehavior?
        /// Cache length, in seconds, is used to calculate buffer size.
        public let cacheLength: Int?
        /// Controls the types of data that passes to onCaptionInfo outputs.  If set to 'all' then 608 and 708 carried DTVCC data will be passed.  If set to 'field1AndField2608' then DTVCC data will be stripped out, but 608 data from both fields will be passed. If set to 'field1608' then only the data carried in 608 from field 1 video will be passed.
        public let captionData: RtmpCaptionData?
        /// Applies only when the rate control mode (in the codec settings) is CBR (constant bit rate). Controls whether the RTMP output stream is padded (with FILL NAL units) in order to achieve a constant bit rate that is truly constant. When there is no padding, the bandwidth varies (up to the bitrate value in the codec settings). We recommend that you choose Auto.
        public let includeFillerNalUnits: IncludeFillerNalUnits?
        /// Controls the behavior of this RTMP group if input becomes unavailable.
        /// - emitOutput: Emit a slate until input returns.
        /// - pauseOutput: Stop transmitting data until input returns. This does not close the underlying RTMP connection.
        public let inputLossAction: InputLossActionForRtmpOut?
        /// If a streaming output fails, number of seconds to wait until a restart is initiated. A value of 0 means never restart.
        public let restartDelay: Int?

        @inlinable
        public init(adMarkers: [RtmpAdMarkers]? = nil, authenticationScheme: AuthenticationScheme? = nil, cacheFullBehavior: RtmpCacheFullBehavior? = nil, cacheLength: Int? = nil, captionData: RtmpCaptionData? = nil, includeFillerNalUnits: IncludeFillerNalUnits? = nil, inputLossAction: InputLossActionForRtmpOut? = nil, restartDelay: Int? = nil) {
            self.adMarkers = adMarkers
            self.authenticationScheme = authenticationScheme
            self.cacheFullBehavior = cacheFullBehavior
            self.cacheLength = cacheLength
            self.captionData = captionData
            self.includeFillerNalUnits = includeFillerNalUnits
            self.inputLossAction = inputLossAction
            self.restartDelay = restartDelay
        }

        public func validate(name: String) throws {
            try self.validate(self.cacheLength, name: "cacheLength", parent: name, min: 30)
            try self.validate(self.restartDelay, name: "restartDelay", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case adMarkers = "adMarkers"
            case authenticationScheme = "authenticationScheme"
            case cacheFullBehavior = "cacheFullBehavior"
            case cacheLength = "cacheLength"
            case captionData = "captionData"
            case includeFillerNalUnits = "includeFillerNalUnits"
            case inputLossAction = "inputLossAction"
            case restartDelay = "restartDelay"
        }
    }

    public struct RtmpOutputSettings: AWSEncodableShape & AWSDecodableShape {
        /// If set to verifyAuthenticity, verify the tls certificate chain to a trusted Certificate Authority (CA).  This will cause rtmps outputs with self-signed certificates to fail.
        public let certificateMode: RtmpOutputCertificateMode?
        /// Number of seconds to wait before retrying a connection to the Flash Media server if the connection is lost.
        public let connectionRetryInterval: Int?
        /// The RTMP endpoint excluding the stream name (eg. rtmp://host/appname). For connection to Akamai, a username and password must be supplied. URI fields accept format identifiers.
        public let destination: OutputLocationRef?
        /// Number of retry attempts.
        public let numRetries: Int?

        @inlinable
        public init(certificateMode: RtmpOutputCertificateMode? = nil, connectionRetryInterval: Int? = nil, destination: OutputLocationRef? = nil, numRetries: Int? = nil) {
            self.certificateMode = certificateMode
            self.connectionRetryInterval = connectionRetryInterval
            self.destination = destination
            self.numRetries = numRetries
        }

        public func validate(name: String) throws {
            try self.validate(self.connectionRetryInterval, name: "connectionRetryInterval", parent: name, min: 1)
            try self.validate(self.numRetries, name: "numRetries", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case certificateMode = "certificateMode"
            case connectionRetryInterval = "connectionRetryInterval"
            case destination = "destination"
            case numRetries = "numRetries"
        }
    }

    public struct ScheduleAction: AWSEncodableShape & AWSDecodableShape {
        /// The name of the action, must be unique within the schedule. This name provides the main reference to an action once it is added to the schedule. A name is unique if it is no longer in the schedule. The schedule is automatically cleaned up to remove actions with a start time of more than 1 hour ago (approximately) so at that point a name can be reused.
        public let actionName: String?
        /// Settings for this schedule action.
        public let scheduleActionSettings: ScheduleActionSettings?
        /// The time for the action to start in the channel.
        public let scheduleActionStartSettings: ScheduleActionStartSettings?

        @inlinable
        public init(actionName: String? = nil, scheduleActionSettings: ScheduleActionSettings? = nil, scheduleActionStartSettings: ScheduleActionStartSettings? = nil) {
            self.actionName = actionName
            self.scheduleActionSettings = scheduleActionSettings
            self.scheduleActionStartSettings = scheduleActionStartSettings
        }

        public func validate(name: String) throws {
            try self.scheduleActionSettings?.validate(name: "\(name).scheduleActionSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case actionName = "actionName"
            case scheduleActionSettings = "scheduleActionSettings"
            case scheduleActionStartSettings = "scheduleActionStartSettings"
        }
    }

    public struct ScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        /// Action to insert ID3 metadata in every segment, in HLS output groups
        public let hlsId3SegmentTaggingSettings: HlsId3SegmentTaggingScheduleActionSettings?
        /// Action to insert ID3 metadata once, in HLS output groups
        public let hlsTimedMetadataSettings: HlsTimedMetadataScheduleActionSettings?
        /// Action to insert ID3 metadata in every segment, in applicable output groups
        public let id3SegmentTaggingSettings: Id3SegmentTaggingScheduleActionSettings?
        /// Action to prepare an input for a future immediate input switch
        public let inputPrepareSettings: InputPrepareScheduleActionSettings?
        /// Action to switch the input
        public let inputSwitchSettings: InputSwitchScheduleActionSettings?
        /// Action to activate a motion graphics image overlay
        public let motionGraphicsImageActivateSettings: MotionGraphicsActivateScheduleActionSettings?
        /// Action to deactivate a motion graphics image overlay
        public let motionGraphicsImageDeactivateSettings: MotionGraphicsDeactivateScheduleActionSettings?
        /// Action to pause or unpause one or both channel pipelines
        public let pauseStateSettings: PauseStateScheduleActionSettings?
        /// Action to specify scte35 input
        public let scte35InputSettings: Scte35InputScheduleActionSettings?
        /// Action to insert SCTE-35 return_to_network message
        public let scte35ReturnToNetworkSettings: Scte35ReturnToNetworkScheduleActionSettings?
        /// Action to insert SCTE-35 splice_insert message
        public let scte35SpliceInsertSettings: Scte35SpliceInsertScheduleActionSettings?
        /// Action to insert SCTE-35 time_signal message
        public let scte35TimeSignalSettings: Scte35TimeSignalScheduleActionSettings?
        /// Action to activate a static image overlay
        public let staticImageActivateSettings: StaticImageActivateScheduleActionSettings?
        /// Action to deactivate a static image overlay
        public let staticImageDeactivateSettings: StaticImageDeactivateScheduleActionSettings?
        /// Action to activate a static image overlay in one or more specified outputs
        public let staticImageOutputActivateSettings: StaticImageOutputActivateScheduleActionSettings?
        /// Action to deactivate a static image overlay in one or more specified outputs
        public let staticImageOutputDeactivateSettings: StaticImageOutputDeactivateScheduleActionSettings?
        /// Action to insert ID3 metadata once, in applicable output groups
        public let timedMetadataSettings: TimedMetadataScheduleActionSettings?

        @inlinable
        public init(hlsId3SegmentTaggingSettings: HlsId3SegmentTaggingScheduleActionSettings? = nil, hlsTimedMetadataSettings: HlsTimedMetadataScheduleActionSettings? = nil, id3SegmentTaggingSettings: Id3SegmentTaggingScheduleActionSettings? = nil, inputPrepareSettings: InputPrepareScheduleActionSettings? = nil, inputSwitchSettings: InputSwitchScheduleActionSettings? = nil, motionGraphicsImageActivateSettings: MotionGraphicsActivateScheduleActionSettings? = nil, motionGraphicsImageDeactivateSettings: MotionGraphicsDeactivateScheduleActionSettings? = nil, pauseStateSettings: PauseStateScheduleActionSettings? = nil, scte35InputSettings: Scte35InputScheduleActionSettings? = nil, scte35ReturnToNetworkSettings: Scte35ReturnToNetworkScheduleActionSettings? = nil, scte35SpliceInsertSettings: Scte35SpliceInsertScheduleActionSettings? = nil, scte35TimeSignalSettings: Scte35TimeSignalScheduleActionSettings? = nil, staticImageActivateSettings: StaticImageActivateScheduleActionSettings? = nil, staticImageDeactivateSettings: StaticImageDeactivateScheduleActionSettings? = nil, staticImageOutputActivateSettings: StaticImageOutputActivateScheduleActionSettings? = nil, staticImageOutputDeactivateSettings: StaticImageOutputDeactivateScheduleActionSettings? = nil, timedMetadataSettings: TimedMetadataScheduleActionSettings? = nil) {
            self.hlsId3SegmentTaggingSettings = hlsId3SegmentTaggingSettings
            self.hlsTimedMetadataSettings = hlsTimedMetadataSettings
            self.id3SegmentTaggingSettings = id3SegmentTaggingSettings
            self.inputPrepareSettings = inputPrepareSettings
            self.inputSwitchSettings = inputSwitchSettings
            self.motionGraphicsImageActivateSettings = motionGraphicsImageActivateSettings
            self.motionGraphicsImageDeactivateSettings = motionGraphicsImageDeactivateSettings
            self.pauseStateSettings = pauseStateSettings
            self.scte35InputSettings = scte35InputSettings
            self.scte35ReturnToNetworkSettings = scte35ReturnToNetworkSettings
            self.scte35SpliceInsertSettings = scte35SpliceInsertSettings
            self.scte35TimeSignalSettings = scte35TimeSignalSettings
            self.staticImageActivateSettings = staticImageActivateSettings
            self.staticImageDeactivateSettings = staticImageDeactivateSettings
            self.staticImageOutputActivateSettings = staticImageOutputActivateSettings
            self.staticImageOutputDeactivateSettings = staticImageOutputDeactivateSettings
            self.timedMetadataSettings = timedMetadataSettings
        }

        public func validate(name: String) throws {
            try self.motionGraphicsImageActivateSettings?.validate(name: "\(name).motionGraphicsImageActivateSettings")
            try self.scte35ReturnToNetworkSettings?.validate(name: "\(name).scte35ReturnToNetworkSettings")
            try self.scte35SpliceInsertSettings?.validate(name: "\(name).scte35SpliceInsertSettings")
            try self.scte35TimeSignalSettings?.validate(name: "\(name).scte35TimeSignalSettings")
            try self.staticImageActivateSettings?.validate(name: "\(name).staticImageActivateSettings")
            try self.staticImageDeactivateSettings?.validate(name: "\(name).staticImageDeactivateSettings")
            try self.staticImageOutputActivateSettings?.validate(name: "\(name).staticImageOutputActivateSettings")
            try self.staticImageOutputDeactivateSettings?.validate(name: "\(name).staticImageOutputDeactivateSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case hlsId3SegmentTaggingSettings = "hlsId3SegmentTaggingSettings"
            case hlsTimedMetadataSettings = "hlsTimedMetadataSettings"
            case id3SegmentTaggingSettings = "id3SegmentTaggingSettings"
            case inputPrepareSettings = "inputPrepareSettings"
            case inputSwitchSettings = "inputSwitchSettings"
            case motionGraphicsImageActivateSettings = "motionGraphicsImageActivateSettings"
            case motionGraphicsImageDeactivateSettings = "motionGraphicsImageDeactivateSettings"
            case pauseStateSettings = "pauseStateSettings"
            case scte35InputSettings = "scte35InputSettings"
            case scte35ReturnToNetworkSettings = "scte35ReturnToNetworkSettings"
            case scte35SpliceInsertSettings = "scte35SpliceInsertSettings"
            case scte35TimeSignalSettings = "scte35TimeSignalSettings"
            case staticImageActivateSettings = "staticImageActivateSettings"
            case staticImageDeactivateSettings = "staticImageDeactivateSettings"
            case staticImageOutputActivateSettings = "staticImageOutputActivateSettings"
            case staticImageOutputDeactivateSettings = "staticImageOutputDeactivateSettings"
            case timedMetadataSettings = "timedMetadataSettings"
        }
    }

    public struct ScheduleActionStartSettings: AWSEncodableShape & AWSDecodableShape {
        /// Option for specifying the start time for an action.
        public let fixedModeScheduleActionStartSettings: FixedModeScheduleActionStartSettings?
        /// Option for specifying an action as relative to another action.
        public let followModeScheduleActionStartSettings: FollowModeScheduleActionStartSettings?
        /// Option for specifying an action that should be applied immediately.
        public let immediateModeScheduleActionStartSettings: ImmediateModeScheduleActionStartSettings?

        @inlinable
        public init(fixedModeScheduleActionStartSettings: FixedModeScheduleActionStartSettings? = nil, followModeScheduleActionStartSettings: FollowModeScheduleActionStartSettings? = nil, immediateModeScheduleActionStartSettings: ImmediateModeScheduleActionStartSettings? = nil) {
            self.fixedModeScheduleActionStartSettings = fixedModeScheduleActionStartSettings
            self.followModeScheduleActionStartSettings = followModeScheduleActionStartSettings
            self.immediateModeScheduleActionStartSettings = immediateModeScheduleActionStartSettings
        }

        private enum CodingKeys: String, CodingKey {
            case fixedModeScheduleActionStartSettings = "fixedModeScheduleActionStartSettings"
            case followModeScheduleActionStartSettings = "followModeScheduleActionStartSettings"
            case immediateModeScheduleActionStartSettings = "immediateModeScheduleActionStartSettings"
        }
    }

    public struct Scte20PlusEmbeddedDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct Scte20SourceSettings: AWSEncodableShape & AWSDecodableShape {
        /// If upconvert, 608 data is both passed through via the "608 compatibility bytes" fields of the 708 wrapper as well as translated into 708. 708 data present in the source content will be discarded.
        public let convert608To708: Scte20Convert608To708?
        /// Specifies the 608/708 channel number within the video track from which to extract captions. Unused for passthrough.
        public let source608ChannelNumber: Int?

        @inlinable
        public init(convert608To708: Scte20Convert608To708? = nil, source608ChannelNumber: Int? = nil) {
            self.convert608To708 = convert608To708
            self.source608ChannelNumber = source608ChannelNumber
        }

        public func validate(name: String) throws {
            try self.validate(self.source608ChannelNumber, name: "source608ChannelNumber", parent: name, max: 4)
            try self.validate(self.source608ChannelNumber, name: "source608ChannelNumber", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case convert608To708 = "convert608To708"
            case source608ChannelNumber = "source608ChannelNumber"
        }
    }

    public struct Scte27DestinationSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct Scte27SourceSettings: AWSEncodableShape & AWSDecodableShape {
        /// If you will configure a WebVTT caption description that references this caption selector, use this field to
        /// provide the language to consider when translating the image-based source to text.
        public let ocrLanguage: Scte27OcrLanguage?
        /// The pid field is used in conjunction with the caption selector languageCode field as follows: - Specify PID and Language: Extracts captions from that PID; the language is "informational". - Specify PID and omit Language: Extracts the specified PID. - Omit PID and specify Language: Extracts the specified language, whichever PID that happens to be. - Omit PID and omit Language: Valid only if source is DVB-Sub that is being passed through; all languages will be passed through.
        public let pid: Int?

        @inlinable
        public init(ocrLanguage: Scte27OcrLanguage? = nil, pid: Int? = nil) {
            self.ocrLanguage = ocrLanguage
            self.pid = pid
        }

        public func validate(name: String) throws {
            try self.validate(self.pid, name: "pid", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case ocrLanguage = "ocrLanguage"
            case pid = "pid"
        }
    }

    public struct Scte35DeliveryRestrictions: AWSEncodableShape & AWSDecodableShape {
        /// Corresponds to SCTE-35 archive_allowed_flag.
        public let archiveAllowedFlag: Scte35ArchiveAllowedFlag?
        /// Corresponds to SCTE-35 device_restrictions parameter.
        public let deviceRestrictions: Scte35DeviceRestrictions?
        /// Corresponds to SCTE-35 no_regional_blackout_flag parameter.
        public let noRegionalBlackoutFlag: Scte35NoRegionalBlackoutFlag?
        /// Corresponds to SCTE-35 web_delivery_allowed_flag parameter.
        public let webDeliveryAllowedFlag: Scte35WebDeliveryAllowedFlag?

        @inlinable
        public init(archiveAllowedFlag: Scte35ArchiveAllowedFlag? = nil, deviceRestrictions: Scte35DeviceRestrictions? = nil, noRegionalBlackoutFlag: Scte35NoRegionalBlackoutFlag? = nil, webDeliveryAllowedFlag: Scte35WebDeliveryAllowedFlag? = nil) {
            self.archiveAllowedFlag = archiveAllowedFlag
            self.deviceRestrictions = deviceRestrictions
            self.noRegionalBlackoutFlag = noRegionalBlackoutFlag
            self.webDeliveryAllowedFlag = webDeliveryAllowedFlag
        }

        private enum CodingKeys: String, CodingKey {
            case archiveAllowedFlag = "archiveAllowedFlag"
            case deviceRestrictions = "deviceRestrictions"
            case noRegionalBlackoutFlag = "noRegionalBlackoutFlag"
            case webDeliveryAllowedFlag = "webDeliveryAllowedFlag"
        }
    }

    public struct Scte35Descriptor: AWSEncodableShape & AWSDecodableShape {
        /// SCTE-35 Descriptor Settings.
        public let scte35DescriptorSettings: Scte35DescriptorSettings?

        @inlinable
        public init(scte35DescriptorSettings: Scte35DescriptorSettings? = nil) {
            self.scte35DescriptorSettings = scte35DescriptorSettings
        }

        public func validate(name: String) throws {
            try self.scte35DescriptorSettings?.validate(name: "\(name).scte35DescriptorSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case scte35DescriptorSettings = "scte35DescriptorSettings"
        }
    }

    public struct Scte35DescriptorSettings: AWSEncodableShape & AWSDecodableShape {
        /// SCTE-35 Segmentation Descriptor.
        public let segmentationDescriptorScte35DescriptorSettings: Scte35SegmentationDescriptor?

        @inlinable
        public init(segmentationDescriptorScte35DescriptorSettings: Scte35SegmentationDescriptor? = nil) {
            self.segmentationDescriptorScte35DescriptorSettings = segmentationDescriptorScte35DescriptorSettings
        }

        public func validate(name: String) throws {
            try self.segmentationDescriptorScte35DescriptorSettings?.validate(name: "\(name).segmentationDescriptorScte35DescriptorSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case segmentationDescriptorScte35DescriptorSettings = "segmentationDescriptorScte35DescriptorSettings"
        }
    }

    public struct Scte35InputScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        /// In fixed mode, enter the name of the input attachment that you want to use as a SCTE-35 input. (Don't enter the ID of the input.)"
        public let inputAttachmentNameReference: String?
        /// Whether the SCTE-35 input should be the active input or a fixed input.
        public let mode: Scte35InputMode?

        @inlinable
        public init(inputAttachmentNameReference: String? = nil, mode: Scte35InputMode? = nil) {
            self.inputAttachmentNameReference = inputAttachmentNameReference
            self.mode = mode
        }

        private enum CodingKeys: String, CodingKey {
            case inputAttachmentNameReference = "inputAttachmentNameReference"
            case mode = "mode"
        }
    }

    public struct Scte35ReturnToNetworkScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        /// The splice_event_id for the SCTE-35 splice_insert, as defined in SCTE-35.
        public let spliceEventId: Int64?

        @inlinable
        public init(spliceEventId: Int64? = nil) {
            self.spliceEventId = spliceEventId
        }

        public func validate(name: String) throws {
            try self.validate(self.spliceEventId, name: "spliceEventId", parent: name, max: 4294967295)
            try self.validate(self.spliceEventId, name: "spliceEventId", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case spliceEventId = "spliceEventId"
        }
    }

    public struct Scte35SegmentationDescriptor: AWSEncodableShape & AWSDecodableShape {
        /// Holds the four SCTE-35 delivery restriction parameters.
        public let deliveryRestrictions: Scte35DeliveryRestrictions?
        /// Corresponds to SCTE-35 segmentation_event_cancel_indicator.
        public let segmentationCancelIndicator: Scte35SegmentationCancelIndicator?
        /// Corresponds to SCTE-35 segmentation_duration. Optional. The duration for the time_signal, in 90 KHz ticks. To convert seconds to ticks, multiple the seconds by 90,000. Enter time in 90 KHz clock ticks. If you do not enter a duration, the time_signal will continue until you insert a cancellation message.
        public let segmentationDuration: Int64?
        /// Corresponds to SCTE-35 segmentation_event_id.
        public let segmentationEventId: Int64?
        /// Corresponds to SCTE-35 segmentation_type_id. One of the segmentation_type_id values listed in the SCTE-35 specification. On the console, enter the ID in decimal (for example, "52"). In the CLI, API, or an SDK, enter the ID in hex (for example, "0x34") or decimal (for example, "52").
        public let segmentationTypeId: Int?
        /// Corresponds to SCTE-35 segmentation_upid. Enter a string containing the hexadecimal representation of the characters that make up the SCTE-35 segmentation_upid value. Must contain an even number of hex characters. Do not include spaces between each hex pair. For example, the ASCII "ADS Information" becomes hex "41445320496e666f726d6174696f6e.
        public let segmentationUpid: String?
        /// Corresponds to SCTE-35 segmentation_upid_type. On the console, enter one of the types listed in the SCTE-35 specification, converted to a decimal. For example, "0x0C" hex from the specification is "12" in decimal. In the CLI, API, or an SDK, enter one of the types listed in the SCTE-35 specification, in either hex (for example, "0x0C" ) or in decimal (for example, "12").
        public let segmentationUpidType: Int?
        /// Corresponds to SCTE-35 segment_num. A value that is valid for the specified segmentation_type_id.
        public let segmentNum: Int?
        /// Corresponds to SCTE-35 segments_expected. A value that is valid for the specified segmentation_type_id.
        public let segmentsExpected: Int?
        /// Corresponds to SCTE-35 sub_segment_num. A value that is valid for the specified segmentation_type_id.
        public let subSegmentNum: Int?
        /// Corresponds to SCTE-35 sub_segments_expected. A value that is valid for the specified segmentation_type_id.
        public let subSegmentsExpected: Int?

        @inlinable
        public init(deliveryRestrictions: Scte35DeliveryRestrictions? = nil, segmentationCancelIndicator: Scte35SegmentationCancelIndicator? = nil, segmentationDuration: Int64? = nil, segmentationEventId: Int64? = nil, segmentationTypeId: Int? = nil, segmentationUpid: String? = nil, segmentationUpidType: Int? = nil, segmentNum: Int? = nil, segmentsExpected: Int? = nil, subSegmentNum: Int? = nil, subSegmentsExpected: Int? = nil) {
            self.deliveryRestrictions = deliveryRestrictions
            self.segmentationCancelIndicator = segmentationCancelIndicator
            self.segmentationDuration = segmentationDuration
            self.segmentationEventId = segmentationEventId
            self.segmentationTypeId = segmentationTypeId
            self.segmentationUpid = segmentationUpid
            self.segmentationUpidType = segmentationUpidType
            self.segmentNum = segmentNum
            self.segmentsExpected = segmentsExpected
            self.subSegmentNum = subSegmentNum
            self.subSegmentsExpected = subSegmentsExpected
        }

        public func validate(name: String) throws {
            try self.validate(self.segmentationDuration, name: "segmentationDuration", parent: name, max: 1099511627775)
            try self.validate(self.segmentationDuration, name: "segmentationDuration", parent: name, min: 0)
            try self.validate(self.segmentationEventId, name: "segmentationEventId", parent: name, max: 4294967295)
            try self.validate(self.segmentationEventId, name: "segmentationEventId", parent: name, min: 0)
            try self.validate(self.segmentationTypeId, name: "segmentationTypeId", parent: name, max: 255)
            try self.validate(self.segmentationTypeId, name: "segmentationTypeId", parent: name, min: 0)
            try self.validate(self.segmentationUpidType, name: "segmentationUpidType", parent: name, max: 255)
            try self.validate(self.segmentationUpidType, name: "segmentationUpidType", parent: name, min: 0)
            try self.validate(self.segmentNum, name: "segmentNum", parent: name, max: 255)
            try self.validate(self.segmentNum, name: "segmentNum", parent: name, min: 0)
            try self.validate(self.segmentsExpected, name: "segmentsExpected", parent: name, max: 255)
            try self.validate(self.segmentsExpected, name: "segmentsExpected", parent: name, min: 0)
            try self.validate(self.subSegmentNum, name: "subSegmentNum", parent: name, max: 255)
            try self.validate(self.subSegmentNum, name: "subSegmentNum", parent: name, min: 0)
            try self.validate(self.subSegmentsExpected, name: "subSegmentsExpected", parent: name, max: 255)
            try self.validate(self.subSegmentsExpected, name: "subSegmentsExpected", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case deliveryRestrictions = "deliveryRestrictions"
            case segmentationCancelIndicator = "segmentationCancelIndicator"
            case segmentationDuration = "segmentationDuration"
            case segmentationEventId = "segmentationEventId"
            case segmentationTypeId = "segmentationTypeId"
            case segmentationUpid = "segmentationUpid"
            case segmentationUpidType = "segmentationUpidType"
            case segmentNum = "segmentNum"
            case segmentsExpected = "segmentsExpected"
            case subSegmentNum = "subSegmentNum"
            case subSegmentsExpected = "subSegmentsExpected"
        }
    }

    public struct Scte35SpliceInsert: AWSEncodableShape & AWSDecodableShape {
        /// When specified, this offset (in milliseconds) is added to the input Ad Avail PTS time. This only applies to embedded SCTE 104/35 messages and does not apply to OOB messages.
        public let adAvailOffset: Int?
        /// When set to ignore, Segment Descriptors with noRegionalBlackoutFlag set to 0 will no longer trigger blackouts or Ad Avail slates
        public let noRegionalBlackoutFlag: Scte35SpliceInsertNoRegionalBlackoutBehavior?
        /// When set to ignore, Segment Descriptors with webDeliveryAllowedFlag set to 0 will no longer trigger blackouts or Ad Avail slates
        public let webDeliveryAllowedFlag: Scte35SpliceInsertWebDeliveryAllowedBehavior?

        @inlinable
        public init(adAvailOffset: Int? = nil, noRegionalBlackoutFlag: Scte35SpliceInsertNoRegionalBlackoutBehavior? = nil, webDeliveryAllowedFlag: Scte35SpliceInsertWebDeliveryAllowedBehavior? = nil) {
            self.adAvailOffset = adAvailOffset
            self.noRegionalBlackoutFlag = noRegionalBlackoutFlag
            self.webDeliveryAllowedFlag = webDeliveryAllowedFlag
        }

        public func validate(name: String) throws {
            try self.validate(self.adAvailOffset, name: "adAvailOffset", parent: name, max: 1000)
            try self.validate(self.adAvailOffset, name: "adAvailOffset", parent: name, min: -1000)
        }

        private enum CodingKeys: String, CodingKey {
            case adAvailOffset = "adAvailOffset"
            case noRegionalBlackoutFlag = "noRegionalBlackoutFlag"
            case webDeliveryAllowedFlag = "webDeliveryAllowedFlag"
        }
    }

    public struct Scte35SpliceInsertScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        /// Optional, the duration for the splice_insert, in 90 KHz ticks. To convert seconds to ticks, multiple the seconds by 90,000. If you enter a duration, there is an expectation that the downstream system can read the duration and cue in at that time. If you do not enter a duration, the splice_insert will continue indefinitely and there is an expectation that you will enter a return_to_network to end the splice_insert at the appropriate time.
        public let duration: Int64?
        /// The splice_event_id for the SCTE-35 splice_insert, as defined in SCTE-35.
        public let spliceEventId: Int64?

        @inlinable
        public init(duration: Int64? = nil, spliceEventId: Int64? = nil) {
            self.duration = duration
            self.spliceEventId = spliceEventId
        }

        public func validate(name: String) throws {
            try self.validate(self.duration, name: "duration", parent: name, max: 8589934591)
            try self.validate(self.duration, name: "duration", parent: name, min: 0)
            try self.validate(self.spliceEventId, name: "spliceEventId", parent: name, max: 4294967295)
            try self.validate(self.spliceEventId, name: "spliceEventId", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case duration = "duration"
            case spliceEventId = "spliceEventId"
        }
    }

    public struct Scte35TimeSignalApos: AWSEncodableShape & AWSDecodableShape {
        /// When specified, this offset (in milliseconds) is added to the input Ad Avail PTS time. This only applies to embedded SCTE 104/35 messages and does not apply to OOB messages.
        public let adAvailOffset: Int?
        /// When set to ignore, Segment Descriptors with noRegionalBlackoutFlag set to 0 will no longer trigger blackouts or Ad Avail slates
        public let noRegionalBlackoutFlag: Scte35AposNoRegionalBlackoutBehavior?
        /// When set to ignore, Segment Descriptors with webDeliveryAllowedFlag set to 0 will no longer trigger blackouts or Ad Avail slates
        public let webDeliveryAllowedFlag: Scte35AposWebDeliveryAllowedBehavior?

        @inlinable
        public init(adAvailOffset: Int? = nil, noRegionalBlackoutFlag: Scte35AposNoRegionalBlackoutBehavior? = nil, webDeliveryAllowedFlag: Scte35AposWebDeliveryAllowedBehavior? = nil) {
            self.adAvailOffset = adAvailOffset
            self.noRegionalBlackoutFlag = noRegionalBlackoutFlag
            self.webDeliveryAllowedFlag = webDeliveryAllowedFlag
        }

        public func validate(name: String) throws {
            try self.validate(self.adAvailOffset, name: "adAvailOffset", parent: name, max: 1000)
            try self.validate(self.adAvailOffset, name: "adAvailOffset", parent: name, min: -1000)
        }

        private enum CodingKeys: String, CodingKey {
            case adAvailOffset = "adAvailOffset"
            case noRegionalBlackoutFlag = "noRegionalBlackoutFlag"
            case webDeliveryAllowedFlag = "webDeliveryAllowedFlag"
        }
    }

    public struct Scte35TimeSignalScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        /// The list of SCTE-35 descriptors accompanying the SCTE-35 time_signal.
        public let scte35Descriptors: [Scte35Descriptor]?

        @inlinable
        public init(scte35Descriptors: [Scte35Descriptor]? = nil) {
            self.scte35Descriptors = scte35Descriptors
        }

        public func validate(name: String) throws {
            try self.scte35Descriptors?.forEach {
                try $0.validate(name: "\(name).scte35Descriptors[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case scte35Descriptors = "scte35Descriptors"
        }
    }

    public struct SdiSource: AWSDecodableShape {
        /// The ARN of this SdiSource. It is automatically assigned when the SdiSource is created.
        public let arn: String?
        /// The ID of the SdiSource. Unique in the AWS account.The ID is the resource-id portion of the ARN.
        public let id: String?
        /// The list of inputs that are currently using this SDI source. This list will be empty if the SdiSource has just been deleted.
        public let inputs: [String]?
        /// Applies only if the type is QUAD. The mode for handling the quad-link signal QUADRANT or INTERLEAVE.
        public let mode: SdiSourceMode?
        /// The name of the SdiSource.
        public let name: String?
        /// Specifies whether the SDI source is attached to an SDI input (IN_USE) or not (IDLE).
        public let state: SdiSourceState?
        public let type: SdiSourceType?

        @inlinable
        public init(arn: String? = nil, id: String? = nil, inputs: [String]? = nil, mode: SdiSourceMode? = nil, name: String? = nil, state: SdiSourceState? = nil, type: SdiSourceType? = nil) {
            self.arn = arn
            self.id = id
            self.inputs = inputs
            self.mode = mode
            self.name = name
            self.state = state
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case id = "id"
            case inputs = "inputs"
            case mode = "mode"
            case name = "name"
            case state = "state"
            case type = "type"
        }
    }

    public struct SdiSourceMapping: AWSDecodableShape {
        /// A number that uniquely identifies the SDI card on the node hardware.
        public let cardNumber: Int?
        /// A number that uniquely identifies a port on the SDI card.
        public let channelNumber: Int?
        /// The ID of the SdiSource to associate with this port on this card. You can use the ListSdiSources operation to discover all the IDs.
        public let sdiSource: String?

        @inlinable
        public init(cardNumber: Int? = nil, channelNumber: Int? = nil, sdiSource: String? = nil) {
            self.cardNumber = cardNumber
            self.channelNumber = channelNumber
            self.sdiSource = sdiSource
        }

        private enum CodingKeys: String, CodingKey {
            case cardNumber = "cardNumber"
            case channelNumber = "channelNumber"
            case sdiSource = "sdiSource"
        }
    }

    public struct SdiSourceMappingUpdateRequest: AWSEncodableShape {
        /// A number that uniquely identifies the SDI card on the node hardware. For information about how physical cards are identified on your node hardware, see the documentation for your node hardware. The numbering always starts at 1.
        public let cardNumber: Int?
        /// A number that uniquely identifies a port on the card. This must be an SDI port (not a timecode port, for example). For information about how ports are identified on physical cards, see the documentation for your node hardware.
        public let channelNumber: Int?
        /// The ID of a SDI source streaming on the given SDI capture card port.
        public let sdiSource: String?

        @inlinable
        public init(cardNumber: Int? = nil, channelNumber: Int? = nil, sdiSource: String? = nil) {
            self.cardNumber = cardNumber
            self.channelNumber = channelNumber
            self.sdiSource = sdiSource
        }

        private enum CodingKeys: String, CodingKey {
            case cardNumber = "cardNumber"
            case channelNumber = "channelNumber"
            case sdiSource = "sdiSource"
        }
    }

    public struct SdiSourceSummary: AWSDecodableShape {
        /// The ARN of this SdiSource. It is automatically assigned when the SdiSource is created.
        public let arn: String?
        /// The ID of the SdiSource. Unique in the AWS account.The ID is the resource-id portion of the ARN.
        public let id: String?
        /// The list of inputs that are currently using this SDI source. This list will be empty if the SdiSource has just been deleted.
        public let inputs: [String]?
        /// Applies only if the type is QUAD. The mode for handling the quad-link signal QUADRANT or INTERLEAVE.
        public let mode: SdiSourceMode?
        /// The name of the SdiSource.
        public let name: String?
        /// Specifies whether the SDI source is attached to an SDI input (IN_USE) or not (IDLE).
        public let state: SdiSourceState?
        public let type: SdiSourceType?

        @inlinable
        public init(arn: String? = nil, id: String? = nil, inputs: [String]? = nil, mode: SdiSourceMode? = nil, name: String? = nil, state: SdiSourceState? = nil, type: SdiSourceType? = nil) {
            self.arn = arn
            self.id = id
            self.inputs = inputs
            self.mode = mode
            self.name = name
            self.state = state
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case id = "id"
            case inputs = "inputs"
            case mode = "mode"
            case name = "name"
            case state = "state"
            case type = "type"
        }
    }

    public struct SignalMapSummary: AWSDecodableShape {
        /// A signal map's ARN (Amazon Resource Name)
        public let arn: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdAt: Date?
        /// A resource's optional description.
        public let description: String?
        /// A signal map's id.
        public let id: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var modifiedAt: Date?
        public let monitorDeploymentStatus: SignalMapMonitorDeploymentStatus?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        public let status: SignalMapStatus?
        public let tags: [String: String]?

        @inlinable
        public init(arn: String? = nil, createdAt: Date? = nil, description: String? = nil, id: String? = nil, modifiedAt: Date? = nil, monitorDeploymentStatus: SignalMapMonitorDeploymentStatus? = nil, name: String? = nil, status: SignalMapStatus? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.createdAt = createdAt
            self.description = description
            self.id = id
            self.modifiedAt = modifiedAt
            self.monitorDeploymentStatus = monitorDeploymentStatus
            self.name = name
            self.status = status
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case createdAt = "createdAt"
            case description = "description"
            case id = "id"
            case modifiedAt = "modifiedAt"
            case monitorDeploymentStatus = "monitorDeploymentStatus"
            case name = "name"
            case status = "status"
            case tags = "tags"
        }
    }

    public struct Smpte2110ReceiverGroup: AWSEncodableShape & AWSDecodableShape {
        /// The single Smpte2110ReceiverGroupSdpSettings that identify the video, audio, and ancillary streams for this receiver group.
        public let sdpSettings: Smpte2110ReceiverGroupSdpSettings?

        @inlinable
        public init(sdpSettings: Smpte2110ReceiverGroupSdpSettings? = nil) {
            self.sdpSettings = sdpSettings
        }

        private enum CodingKeys: String, CodingKey {
            case sdpSettings = "sdpSettings"
        }
    }

    public struct Smpte2110ReceiverGroupSdpSettings: AWSEncodableShape & AWSDecodableShape {
        /// A list of InputSdpLocations. Each item in the list specifies the SDP file and index for one ancillary SMPTE 2110 stream.
        /// Each stream encapsulates one captions stream (out of any number you can include) or the single SCTE 35 stream that you can include.
        public let ancillarySdps: [InputSdpLocation]?
        /// A list of InputSdpLocations. Each item in the list specifies the SDP file and index for one audio SMPTE 2110 stream.
        public let audioSdps: [InputSdpLocation]?
        /// The InputSdpLocation that specifies the SDP file and index for the single video SMPTE 2110 stream for this 2110 input.
        public let videoSdp: InputSdpLocation?

        @inlinable
        public init(ancillarySdps: [InputSdpLocation]? = nil, audioSdps: [InputSdpLocation]? = nil, videoSdp: InputSdpLocation? = nil) {
            self.ancillarySdps = ancillarySdps
            self.audioSdps = audioSdps
            self.videoSdp = videoSdp
        }

        private enum CodingKeys: String, CodingKey {
            case ancillarySdps = "ancillarySdps"
            case audioSdps = "audioSdps"
            case videoSdp = "videoSdp"
        }
    }

    public struct Smpte2110ReceiverGroupSettings: AWSEncodableShape & AWSDecodableShape {
        public let smpte2110ReceiverGroups: [Smpte2110ReceiverGroup]?

        @inlinable
        public init(smpte2110ReceiverGroups: [Smpte2110ReceiverGroup]? = nil) {
            self.smpte2110ReceiverGroups = smpte2110ReceiverGroups
        }

        private enum CodingKeys: String, CodingKey {
            case smpte2110ReceiverGroups = "smpte2110ReceiverGroups"
        }
    }

    public struct SmpteTtDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct SrtCallerDecryption: AWSDecodableShape {
        /// The algorithm used to encrypt content.
        public let algorithm: Algorithm?
        /// The ARN for the secret in Secrets Manager. Someone in your organization must create a secret and provide you with its ARN. The secret holds the passphrase that MediaLive uses to decrypt the source content.
        public let passphraseSecretArn: String?

        @inlinable
        public init(algorithm: Algorithm? = nil, passphraseSecretArn: String? = nil) {
            self.algorithm = algorithm
            self.passphraseSecretArn = passphraseSecretArn
        }

        private enum CodingKeys: String, CodingKey {
            case algorithm = "algorithm"
            case passphraseSecretArn = "passphraseSecretArn"
        }
    }

    public struct SrtCallerDecryptionRequest: AWSEncodableShape {
        /// The algorithm used to encrypt content.
        public let algorithm: Algorithm?
        /// The ARN for the secret in Secrets Manager. Someone in your organization must create a secret and provide you with its ARN. This secret holds the passphrase that MediaLive will use to decrypt the source content.
        public let passphraseSecretArn: String?

        @inlinable
        public init(algorithm: Algorithm? = nil, passphraseSecretArn: String? = nil) {
            self.algorithm = algorithm
            self.passphraseSecretArn = passphraseSecretArn
        }

        private enum CodingKeys: String, CodingKey {
            case algorithm = "algorithm"
            case passphraseSecretArn = "passphraseSecretArn"
        }
    }

    public struct SrtCallerSource: AWSDecodableShape {
        public let decryption: SrtCallerDecryption?
        /// The preferred latency (in milliseconds) for implementing packet loss and recovery. Packet recovery is a key feature of SRT.
        public let minimumLatency: Int?
        /// The IP address at the upstream system (the listener) that MediaLive (the caller) connects to.
        public let srtListenerAddress: String?
        /// The port at the upstream system (the listener) that MediaLive (the caller) connects to.
        public let srtListenerPort: String?
        /// The stream ID, if the upstream system uses this identifier.
        public let streamId: String?

        @inlinable
        public init(decryption: SrtCallerDecryption? = nil, minimumLatency: Int? = nil, srtListenerAddress: String? = nil, srtListenerPort: String? = nil, streamId: String? = nil) {
            self.decryption = decryption
            self.minimumLatency = minimumLatency
            self.srtListenerAddress = srtListenerAddress
            self.srtListenerPort = srtListenerPort
            self.streamId = streamId
        }

        private enum CodingKeys: String, CodingKey {
            case decryption = "decryption"
            case minimumLatency = "minimumLatency"
            case srtListenerAddress = "srtListenerAddress"
            case srtListenerPort = "srtListenerPort"
            case streamId = "streamId"
        }
    }

    public struct SrtCallerSourceRequest: AWSEncodableShape {
        public let decryption: SrtCallerDecryptionRequest?
        /// The preferred latency (in milliseconds) for implementing packet loss and recovery. Packet recovery is a key feature of SRT. Obtain this value from the operator at the upstream system.
        public let minimumLatency: Int?
        /// The IP address at the upstream system (the listener) that MediaLive (the caller) will connect to.
        public let srtListenerAddress: String?
        /// The port at the upstream system (the listener) that MediaLive (the caller) will connect to.
        public let srtListenerPort: String?
        /// This value is required if the upstream system uses this identifier because without it, the SRT handshake between MediaLive (the caller) and the upstream system (the listener) might fail.
        public let streamId: String?

        @inlinable
        public init(decryption: SrtCallerDecryptionRequest? = nil, minimumLatency: Int? = nil, srtListenerAddress: String? = nil, srtListenerPort: String? = nil, streamId: String? = nil) {
            self.decryption = decryption
            self.minimumLatency = minimumLatency
            self.srtListenerAddress = srtListenerAddress
            self.srtListenerPort = srtListenerPort
            self.streamId = streamId
        }

        private enum CodingKeys: String, CodingKey {
            case decryption = "decryption"
            case minimumLatency = "minimumLatency"
            case srtListenerAddress = "srtListenerAddress"
            case srtListenerPort = "srtListenerPort"
            case streamId = "streamId"
        }
    }

    public struct SrtGroupSettings: AWSEncodableShape & AWSDecodableShape {
        /// Specifies behavior of last resort when input video is lost, and no more backup inputs are available. When dropTs is selected the entire transport stream will stop being emitted.  When dropProgram is selected the program can be dropped from the transport stream (and replaced with null packets to meet the TS bitrate requirement).  Or, when emitProgram is chosen the transport stream will continue to be produced normally with repeat frames, black frames, or slate frames substituted for the absent input video.
        public let inputLossAction: InputLossActionForUdpOut?

        @inlinable
        public init(inputLossAction: InputLossActionForUdpOut? = nil) {
            self.inputLossAction = inputLossAction
        }

        private enum CodingKeys: String, CodingKey {
            case inputLossAction = "inputLossAction"
        }
    }

    public struct SrtOutputDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        /// Arn used to extract the password from Secrets Manager
        public let encryptionPassphraseSecretArn: String?
        /// Stream id for SRT destinations (URLs of type srt://)
        public let streamId: String?
        /// A URL specifying a destination
        public let url: String?

        @inlinable
        public init(encryptionPassphraseSecretArn: String? = nil, streamId: String? = nil, url: String? = nil) {
            self.encryptionPassphraseSecretArn = encryptionPassphraseSecretArn
            self.streamId = streamId
            self.url = url
        }

        private enum CodingKeys: String, CodingKey {
            case encryptionPassphraseSecretArn = "encryptionPassphraseSecretArn"
            case streamId = "streamId"
            case url = "url"
        }
    }

    public struct SrtOutputSettings: AWSEncodableShape & AWSDecodableShape {
        /// SRT output buffering in milliseconds. A higher value increases latency through the encoder. But the benefits are that it helps to maintain a constant, low-jitter SRT output, and it accommodates clock recovery, input switching, input disruptions, picture reordering, and so on. Range: 0-10000 milliseconds.
        public let bufferMsec: Int?
        public let containerSettings: UdpContainerSettings?
        public let destination: OutputLocationRef?
        /// The encryption level for the content. Valid values are AES128, AES192, AES256. You and the downstream system should plan how to set this field because the values must not conflict with each other.
        public let encryptionType: SrtEncryptionType?
        /// The latency value, in milliseconds, that is proposed during the SRT connection handshake. SRT will choose the maximum of the values proposed by the sender and receiver. On the sender side, latency is the amount of time a packet is held to give it a chance to be delivered successfully. On the receiver side, latency is the amount of time the packet is held before delivering to the application, aiding in packet recovery and matching as closely as possible the packet timing of the sender. Range: 40-16000 milliseconds.
        public let latency: Int?

        @inlinable
        public init(bufferMsec: Int? = nil, containerSettings: UdpContainerSettings? = nil, destination: OutputLocationRef? = nil, encryptionType: SrtEncryptionType? = nil, latency: Int? = nil) {
            self.bufferMsec = bufferMsec
            self.containerSettings = containerSettings
            self.destination = destination
            self.encryptionType = encryptionType
            self.latency = latency
        }

        public func validate(name: String) throws {
            try self.validate(self.bufferMsec, name: "bufferMsec", parent: name, max: 10000)
            try self.validate(self.bufferMsec, name: "bufferMsec", parent: name, min: 0)
            try self.containerSettings?.validate(name: "\(name).containerSettings")
            try self.validate(self.latency, name: "latency", parent: name, max: 16000)
            try self.validate(self.latency, name: "latency", parent: name, min: 40)
        }

        private enum CodingKeys: String, CodingKey {
            case bufferMsec = "bufferMsec"
            case containerSettings = "containerSettings"
            case destination = "destination"
            case encryptionType = "encryptionType"
            case latency = "latency"
        }
    }

    public struct SrtSettings: AWSDecodableShape {
        public let srtCallerSources: [SrtCallerSource]?

        @inlinable
        public init(srtCallerSources: [SrtCallerSource]? = nil) {
            self.srtCallerSources = srtCallerSources
        }

        private enum CodingKeys: String, CodingKey {
            case srtCallerSources = "srtCallerSources"
        }
    }

    public struct SrtSettingsRequest: AWSEncodableShape {
        public let srtCallerSources: [SrtCallerSourceRequest]?

        @inlinable
        public init(srtCallerSources: [SrtCallerSourceRequest]? = nil) {
            self.srtCallerSources = srtCallerSources
        }

        private enum CodingKeys: String, CodingKey {
            case srtCallerSources = "srtCallerSources"
        }
    }

    public struct StandardHlsSettings: AWSEncodableShape & AWSDecodableShape {
        /// List all the audio groups that are used with the video output stream. Input all the audio GROUP-IDs that are associated to the video, separate by ','.
        public let audioRenditionSets: String?
        public let m3u8Settings: M3u8Settings?

        @inlinable
        public init(audioRenditionSets: String? = nil, m3u8Settings: M3u8Settings? = nil) {
            self.audioRenditionSets = audioRenditionSets
            self.m3u8Settings = m3u8Settings
        }

        public func validate(name: String) throws {
            try self.m3u8Settings?.validate(name: "\(name).m3u8Settings")
        }

        private enum CodingKeys: String, CodingKey {
            case audioRenditionSets = "audioRenditionSets"
            case m3u8Settings = "m3u8Settings"
        }
    }

    public struct StartChannelRequest: AWSEncodableShape {
        /// A request to start a channel
        public let channelId: String

        @inlinable
        public init(channelId: String) {
            self.channelId = channelId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.channelId, key: "ChannelId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct StartChannelResponse: AWSDecodableShape {
        /// Anywhere settings for this channel.
        public let anywhereSettings: DescribeAnywhereSettings?
        /// The unique arn of the channel.
        public let arn: String?
        /// Specification of CDI inputs for this channel
        public let cdiInputSpecification: CdiInputSpecification?
        /// The class for this channel. STANDARD for a channel with two pipelines or SINGLE_PIPELINE for a channel with one pipeline.
        public let channelClass: ChannelClass?
        /// Requested engine version for this channel.
        public let channelEngineVersion: ChannelEngineVersionResponse?
        /// A list of destinations of the channel. For UDP outputs, there is one
        /// destination per output. For other types (HLS, for example), there is
        /// one destination per packager.
        public let destinations: [OutputDestination]?
        /// The endpoints where outgoing connections initiate from
        public let egressEndpoints: [ChannelEgressEndpoint]?
        public let encoderSettings: EncoderSettings?
        /// The unique id of the channel.
        public let id: String?
        /// List of input attachments for channel.
        public let inputAttachments: [InputAttachment]?
        /// Specification of network and file inputs for this channel
        public let inputSpecification: InputSpecification?
        /// The log level being written to CloudWatch Logs.
        public let logLevel: LogLevel?
        /// Maintenance settings for this channel.
        public let maintenance: MaintenanceStatus?
        /// The name of the channel. (user-mutable)
        public let name: String?
        /// Runtime details for the pipelines of a running channel.
        public let pipelineDetails: [PipelineDetail]?
        /// The number of currently healthy pipelines.
        public let pipelinesRunningCount: Int?
        /// The Amazon Resource Name (ARN) of the role assumed when running the Channel.
        public let roleArn: String?
        public let state: ChannelState?
        /// A collection of key-value pairs.
        public let tags: [String: String]?
        /// Settings for VPC output
        public let vpc: VpcOutputSettingsDescription?

        @inlinable
        public init(anywhereSettings: DescribeAnywhereSettings? = nil, arn: String? = nil, cdiInputSpecification: CdiInputSpecification? = nil, channelClass: ChannelClass? = nil, channelEngineVersion: ChannelEngineVersionResponse? = nil, destinations: [OutputDestination]? = nil, egressEndpoints: [ChannelEgressEndpoint]? = nil, encoderSettings: EncoderSettings? = nil, id: String? = nil, inputAttachments: [InputAttachment]? = nil, inputSpecification: InputSpecification? = nil, logLevel: LogLevel? = nil, maintenance: MaintenanceStatus? = nil, name: String? = nil, pipelineDetails: [PipelineDetail]? = nil, pipelinesRunningCount: Int? = nil, roleArn: String? = nil, state: ChannelState? = nil, tags: [String: String]? = nil, vpc: VpcOutputSettingsDescription? = nil) {
            self.anywhereSettings = anywhereSettings
            self.arn = arn
            self.cdiInputSpecification = cdiInputSpecification
            self.channelClass = channelClass
            self.channelEngineVersion = channelEngineVersion
            self.destinations = destinations
            self.egressEndpoints = egressEndpoints
            self.encoderSettings = encoderSettings
            self.id = id
            self.inputAttachments = inputAttachments
            self.inputSpecification = inputSpecification
            self.logLevel = logLevel
            self.maintenance = maintenance
            self.name = name
            self.pipelineDetails = pipelineDetails
            self.pipelinesRunningCount = pipelinesRunningCount
            self.roleArn = roleArn
            self.state = state
            self.tags = tags
            self.vpc = vpc
        }

        private enum CodingKeys: String, CodingKey {
            case anywhereSettings = "anywhereSettings"
            case arn = "arn"
            case cdiInputSpecification = "cdiInputSpecification"
            case channelClass = "channelClass"
            case channelEngineVersion = "channelEngineVersion"
            case destinations = "destinations"
            case egressEndpoints = "egressEndpoints"
            case encoderSettings = "encoderSettings"
            case id = "id"
            case inputAttachments = "inputAttachments"
            case inputSpecification = "inputSpecification"
            case logLevel = "logLevel"
            case maintenance = "maintenance"
            case name = "name"
            case pipelineDetails = "pipelineDetails"
            case pipelinesRunningCount = "pipelinesRunningCount"
            case roleArn = "roleArn"
            case state = "state"
            case tags = "tags"
            case vpc = "vpc"
        }
    }

    public struct StartDeleteMonitorDeploymentRequest: AWSEncodableShape {
        /// A signal map's identifier. Can be either be its id or current name.
        public let identifier: String

        @inlinable
        public init(identifier: String) {
            self.identifier = identifier
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.identifier, key: "Identifier")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct StartDeleteMonitorDeploymentResponse: AWSDecodableShape {
        /// A signal map's ARN (Amazon Resource Name)
        public let arn: String?
        public let cloudWatchAlarmTemplateGroupIds: [String]?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdAt: Date?
        /// A resource's optional description.
        public let description: String?
        /// A top-level supported AWS resource ARN to discovery a signal map from.
        public let discoveryEntryPointArn: String?
        /// Error message associated with a failed creation or failed update attempt of a signal map.
        public let errorMessage: String?
        public let eventBridgeRuleTemplateGroupIds: [String]?
        public let failedMediaResourceMap: [String: MediaResource]?
        /// A signal map's id.
        public let id: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var lastDiscoveredAt: Date?
        public let lastSuccessfulMonitorDeployment: SuccessfulMonitorDeployment?
        public let mediaResourceMap: [String: MediaResource]?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var modifiedAt: Date?
        /// If true, there are pending monitor changes for this signal map that can be deployed.
        public let monitorChangesPendingDeployment: Bool?
        public let monitorDeployment: MonitorDeployment?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        public let status: SignalMapStatus?
        public let tags: [String: String]?

        @inlinable
        public init(arn: String? = nil, cloudWatchAlarmTemplateGroupIds: [String]? = nil, createdAt: Date? = nil, description: String? = nil, discoveryEntryPointArn: String? = nil, errorMessage: String? = nil, eventBridgeRuleTemplateGroupIds: [String]? = nil, failedMediaResourceMap: [String: MediaResource]? = nil, id: String? = nil, lastDiscoveredAt: Date? = nil, lastSuccessfulMonitorDeployment: SuccessfulMonitorDeployment? = nil, mediaResourceMap: [String: MediaResource]? = nil, modifiedAt: Date? = nil, monitorChangesPendingDeployment: Bool? = nil, monitorDeployment: MonitorDeployment? = nil, name: String? = nil, status: SignalMapStatus? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.cloudWatchAlarmTemplateGroupIds = cloudWatchAlarmTemplateGroupIds
            self.createdAt = createdAt
            self.description = description
            self.discoveryEntryPointArn = discoveryEntryPointArn
            self.errorMessage = errorMessage
            self.eventBridgeRuleTemplateGroupIds = eventBridgeRuleTemplateGroupIds
            self.failedMediaResourceMap = failedMediaResourceMap
            self.id = id
            self.lastDiscoveredAt = lastDiscoveredAt
            self.lastSuccessfulMonitorDeployment = lastSuccessfulMonitorDeployment
            self.mediaResourceMap = mediaResourceMap
            self.modifiedAt = modifiedAt
            self.monitorChangesPendingDeployment = monitorChangesPendingDeployment
            self.monitorDeployment = monitorDeployment
            self.name = name
            self.status = status
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case cloudWatchAlarmTemplateGroupIds = "cloudWatchAlarmTemplateGroupIds"
            case createdAt = "createdAt"
            case description = "description"
            case discoveryEntryPointArn = "discoveryEntryPointArn"
            case errorMessage = "errorMessage"
            case eventBridgeRuleTemplateGroupIds = "eventBridgeRuleTemplateGroupIds"
            case failedMediaResourceMap = "failedMediaResourceMap"
            case id = "id"
            case lastDiscoveredAt = "lastDiscoveredAt"
            case lastSuccessfulMonitorDeployment = "lastSuccessfulMonitorDeployment"
            case mediaResourceMap = "mediaResourceMap"
            case modifiedAt = "modifiedAt"
            case monitorChangesPendingDeployment = "monitorChangesPendingDeployment"
            case monitorDeployment = "monitorDeployment"
            case name = "name"
            case status = "status"
            case tags = "tags"
        }
    }

    public struct StartInputDeviceMaintenanceWindowRequest: AWSEncodableShape {
        /// The unique ID of the input device to start a maintenance window for. For example, hd-123456789abcdef.
        public let inputDeviceId: String

        @inlinable
        public init(inputDeviceId: String) {
            self.inputDeviceId = inputDeviceId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.inputDeviceId, key: "InputDeviceId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct StartInputDeviceMaintenanceWindowResponse: AWSDecodableShape {
        public init() {}
    }

    public struct StartInputDeviceRequest: AWSEncodableShape {
        /// The unique ID of the input device to start. For example, hd-123456789abcdef.
        public let inputDeviceId: String

        @inlinable
        public init(inputDeviceId: String) {
            self.inputDeviceId = inputDeviceId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.inputDeviceId, key: "InputDeviceId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct StartInputDeviceResponse: AWSDecodableShape {
        public init() {}
    }

    public struct StartMonitorDeploymentRequest: AWSEncodableShape {
        public let dryRun: Bool?
        /// A signal map's identifier. Can be either be its id or current name.
        public let identifier: String

        @inlinable
        public init(dryRun: Bool? = nil, identifier: String) {
            self.dryRun = dryRun
            self.identifier = identifier
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            try container.encodeIfPresent(self.dryRun, forKey: .dryRun)
            request.encodePath(self.identifier, key: "Identifier")
        }

        private enum CodingKeys: String, CodingKey {
            case dryRun = "dryRun"
        }
    }

    public struct StartMonitorDeploymentResponse: AWSDecodableShape {
        /// A signal map's ARN (Amazon Resource Name)
        public let arn: String?
        public let cloudWatchAlarmTemplateGroupIds: [String]?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdAt: Date?
        /// A resource's optional description.
        public let description: String?
        /// A top-level supported AWS resource ARN to discovery a signal map from.
        public let discoveryEntryPointArn: String?
        /// Error message associated with a failed creation or failed update attempt of a signal map.
        public let errorMessage: String?
        public let eventBridgeRuleTemplateGroupIds: [String]?
        public let failedMediaResourceMap: [String: MediaResource]?
        /// A signal map's id.
        public let id: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var lastDiscoveredAt: Date?
        public let lastSuccessfulMonitorDeployment: SuccessfulMonitorDeployment?
        public let mediaResourceMap: [String: MediaResource]?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var modifiedAt: Date?
        /// If true, there are pending monitor changes for this signal map that can be deployed.
        public let monitorChangesPendingDeployment: Bool?
        public let monitorDeployment: MonitorDeployment?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        public let status: SignalMapStatus?
        public let tags: [String: String]?

        @inlinable
        public init(arn: String? = nil, cloudWatchAlarmTemplateGroupIds: [String]? = nil, createdAt: Date? = nil, description: String? = nil, discoveryEntryPointArn: String? = nil, errorMessage: String? = nil, eventBridgeRuleTemplateGroupIds: [String]? = nil, failedMediaResourceMap: [String: MediaResource]? = nil, id: String? = nil, lastDiscoveredAt: Date? = nil, lastSuccessfulMonitorDeployment: SuccessfulMonitorDeployment? = nil, mediaResourceMap: [String: MediaResource]? = nil, modifiedAt: Date? = nil, monitorChangesPendingDeployment: Bool? = nil, monitorDeployment: MonitorDeployment? = nil, name: String? = nil, status: SignalMapStatus? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.cloudWatchAlarmTemplateGroupIds = cloudWatchAlarmTemplateGroupIds
            self.createdAt = createdAt
            self.description = description
            self.discoveryEntryPointArn = discoveryEntryPointArn
            self.errorMessage = errorMessage
            self.eventBridgeRuleTemplateGroupIds = eventBridgeRuleTemplateGroupIds
            self.failedMediaResourceMap = failedMediaResourceMap
            self.id = id
            self.lastDiscoveredAt = lastDiscoveredAt
            self.lastSuccessfulMonitorDeployment = lastSuccessfulMonitorDeployment
            self.mediaResourceMap = mediaResourceMap
            self.modifiedAt = modifiedAt
            self.monitorChangesPendingDeployment = monitorChangesPendingDeployment
            self.monitorDeployment = monitorDeployment
            self.name = name
            self.status = status
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case cloudWatchAlarmTemplateGroupIds = "cloudWatchAlarmTemplateGroupIds"
            case createdAt = "createdAt"
            case description = "description"
            case discoveryEntryPointArn = "discoveryEntryPointArn"
            case errorMessage = "errorMessage"
            case eventBridgeRuleTemplateGroupIds = "eventBridgeRuleTemplateGroupIds"
            case failedMediaResourceMap = "failedMediaResourceMap"
            case id = "id"
            case lastDiscoveredAt = "lastDiscoveredAt"
            case lastSuccessfulMonitorDeployment = "lastSuccessfulMonitorDeployment"
            case mediaResourceMap = "mediaResourceMap"
            case modifiedAt = "modifiedAt"
            case monitorChangesPendingDeployment = "monitorChangesPendingDeployment"
            case monitorDeployment = "monitorDeployment"
            case name = "name"
            case status = "status"
            case tags = "tags"
        }
    }

    public struct StartMultiplexRequest: AWSEncodableShape {
        /// The ID of the multiplex.
        public let multiplexId: String

        @inlinable
        public init(multiplexId: String) {
            self.multiplexId = multiplexId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.multiplexId, key: "MultiplexId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct StartMultiplexResponse: AWSDecodableShape {
        /// The unique arn of the multiplex.
        public let arn: String?
        /// A list of availability zones for the multiplex.
        public let availabilityZones: [String]?
        /// A list of the multiplex output destinations.
        public let destinations: [MultiplexOutputDestination]?
        /// The unique id of the multiplex.
        public let id: String?
        /// Configuration for a multiplex event.
        public let multiplexSettings: MultiplexSettings?
        /// The name of the multiplex.
        public let name: String?
        /// The number of currently healthy pipelines.
        public let pipelinesRunningCount: Int?
        /// The number of programs in the multiplex.
        public let programCount: Int?
        /// The current state of the multiplex.
        public let state: MultiplexState?
        /// A collection of key-value pairs.
        public let tags: [String: String]?

        @inlinable
        public init(arn: String? = nil, availabilityZones: [String]? = nil, destinations: [MultiplexOutputDestination]? = nil, id: String? = nil, multiplexSettings: MultiplexSettings? = nil, name: String? = nil, pipelinesRunningCount: Int? = nil, programCount: Int? = nil, state: MultiplexState? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.availabilityZones = availabilityZones
            self.destinations = destinations
            self.id = id
            self.multiplexSettings = multiplexSettings
            self.name = name
            self.pipelinesRunningCount = pipelinesRunningCount
            self.programCount = programCount
            self.state = state
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case availabilityZones = "availabilityZones"
            case destinations = "destinations"
            case id = "id"
            case multiplexSettings = "multiplexSettings"
            case name = "name"
            case pipelinesRunningCount = "pipelinesRunningCount"
            case programCount = "programCount"
            case state = "state"
            case tags = "tags"
        }
    }

    public struct StartTimecode: AWSEncodableShape & AWSDecodableShape {
        /// The timecode for the frame where you want to start the clip. Optional; if not specified, the clip starts at first frame in the file. Enter the timecode as HH:MM:SS:FF or HH:MM:SS;FF.
        public let timecode: String?

        @inlinable
        public init(timecode: String? = nil) {
            self.timecode = timecode
        }

        private enum CodingKeys: String, CodingKey {
            case timecode = "timecode"
        }
    }

    public struct StartUpdateSignalMapRequest: AWSEncodableShape {
        public let cloudWatchAlarmTemplateGroupIdentifiers: [String]?
        /// A resource's optional description.
        public let description: String?
        /// A top-level supported AWS resource ARN to discovery a signal map from.
        public let discoveryEntryPointArn: String?
        public let eventBridgeRuleTemplateGroupIdentifiers: [String]?
        /// If true, will force a rediscovery of a signal map if an unchanged discoveryEntryPointArn is provided.
        public let forceRediscovery: Bool?
        /// A signal map's identifier. Can be either be its id or current name.
        public let identifier: String
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?

        @inlinable
        public init(cloudWatchAlarmTemplateGroupIdentifiers: [String]? = nil, description: String? = nil, discoveryEntryPointArn: String? = nil, eventBridgeRuleTemplateGroupIdentifiers: [String]? = nil, forceRediscovery: Bool? = nil, identifier: String, name: String? = nil) {
            self.cloudWatchAlarmTemplateGroupIdentifiers = cloudWatchAlarmTemplateGroupIdentifiers
            self.description = description
            self.discoveryEntryPointArn = discoveryEntryPointArn
            self.eventBridgeRuleTemplateGroupIdentifiers = eventBridgeRuleTemplateGroupIdentifiers
            self.forceRediscovery = forceRediscovery
            self.identifier = identifier
            self.name = name
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            try container.encodeIfPresent(self.cloudWatchAlarmTemplateGroupIdentifiers, forKey: .cloudWatchAlarmTemplateGroupIdentifiers)
            try container.encodeIfPresent(self.description, forKey: .description)
            try container.encodeIfPresent(self.discoveryEntryPointArn, forKey: .discoveryEntryPointArn)
            try container.encodeIfPresent(self.eventBridgeRuleTemplateGroupIdentifiers, forKey: .eventBridgeRuleTemplateGroupIdentifiers)
            try container.encodeIfPresent(self.forceRediscovery, forKey: .forceRediscovery)
            request.encodePath(self.identifier, key: "Identifier")
            try container.encodeIfPresent(self.name, forKey: .name)
        }

        public func validate(name: String) throws {
            try self.cloudWatchAlarmTemplateGroupIdentifiers?.forEach {
                try validate($0, name: "cloudWatchAlarmTemplateGroupIdentifiers[]", parent: name, pattern: "^[^\\s]+$")
            }
            try self.validate(self.description, name: "description", parent: name, max: 1024)
            try self.validate(self.discoveryEntryPointArn, name: "discoveryEntryPointArn", parent: name, max: 2048)
            try self.validate(self.discoveryEntryPointArn, name: "discoveryEntryPointArn", parent: name, min: 1)
            try self.eventBridgeRuleTemplateGroupIdentifiers?.forEach {
                try validate($0, name: "eventBridgeRuleTemplateGroupIdentifiers[]", parent: name, pattern: "^[^\\s]+$")
            }
            try self.validate(self.name, name: "name", parent: name, max: 255)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[^\\s]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case cloudWatchAlarmTemplateGroupIdentifiers = "cloudWatchAlarmTemplateGroupIdentifiers"
            case description = "description"
            case discoveryEntryPointArn = "discoveryEntryPointArn"
            case eventBridgeRuleTemplateGroupIdentifiers = "eventBridgeRuleTemplateGroupIdentifiers"
            case forceRediscovery = "forceRediscovery"
            case name = "name"
        }
    }

    public struct StartUpdateSignalMapResponse: AWSDecodableShape {
        /// A signal map's ARN (Amazon Resource Name)
        public let arn: String?
        public let cloudWatchAlarmTemplateGroupIds: [String]?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdAt: Date?
        /// A resource's optional description.
        public let description: String?
        /// A top-level supported AWS resource ARN to discovery a signal map from.
        public let discoveryEntryPointArn: String?
        /// Error message associated with a failed creation or failed update attempt of a signal map.
        public let errorMessage: String?
        public let eventBridgeRuleTemplateGroupIds: [String]?
        public let failedMediaResourceMap: [String: MediaResource]?
        /// A signal map's id.
        public let id: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var lastDiscoveredAt: Date?
        public let lastSuccessfulMonitorDeployment: SuccessfulMonitorDeployment?
        public let mediaResourceMap: [String: MediaResource]?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var modifiedAt: Date?
        /// If true, there are pending monitor changes for this signal map that can be deployed.
        public let monitorChangesPendingDeployment: Bool?
        public let monitorDeployment: MonitorDeployment?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        public let status: SignalMapStatus?
        public let tags: [String: String]?

        @inlinable
        public init(arn: String? = nil, cloudWatchAlarmTemplateGroupIds: [String]? = nil, createdAt: Date? = nil, description: String? = nil, discoveryEntryPointArn: String? = nil, errorMessage: String? = nil, eventBridgeRuleTemplateGroupIds: [String]? = nil, failedMediaResourceMap: [String: MediaResource]? = nil, id: String? = nil, lastDiscoveredAt: Date? = nil, lastSuccessfulMonitorDeployment: SuccessfulMonitorDeployment? = nil, mediaResourceMap: [String: MediaResource]? = nil, modifiedAt: Date? = nil, monitorChangesPendingDeployment: Bool? = nil, monitorDeployment: MonitorDeployment? = nil, name: String? = nil, status: SignalMapStatus? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.cloudWatchAlarmTemplateGroupIds = cloudWatchAlarmTemplateGroupIds
            self.createdAt = createdAt
            self.description = description
            self.discoveryEntryPointArn = discoveryEntryPointArn
            self.errorMessage = errorMessage
            self.eventBridgeRuleTemplateGroupIds = eventBridgeRuleTemplateGroupIds
            self.failedMediaResourceMap = failedMediaResourceMap
            self.id = id
            self.lastDiscoveredAt = lastDiscoveredAt
            self.lastSuccessfulMonitorDeployment = lastSuccessfulMonitorDeployment
            self.mediaResourceMap = mediaResourceMap
            self.modifiedAt = modifiedAt
            self.monitorChangesPendingDeployment = monitorChangesPendingDeployment
            self.monitorDeployment = monitorDeployment
            self.name = name
            self.status = status
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case cloudWatchAlarmTemplateGroupIds = "cloudWatchAlarmTemplateGroupIds"
            case createdAt = "createdAt"
            case description = "description"
            case discoveryEntryPointArn = "discoveryEntryPointArn"
            case errorMessage = "errorMessage"
            case eventBridgeRuleTemplateGroupIds = "eventBridgeRuleTemplateGroupIds"
            case failedMediaResourceMap = "failedMediaResourceMap"
            case id = "id"
            case lastDiscoveredAt = "lastDiscoveredAt"
            case lastSuccessfulMonitorDeployment = "lastSuccessfulMonitorDeployment"
            case mediaResourceMap = "mediaResourceMap"
            case modifiedAt = "modifiedAt"
            case monitorChangesPendingDeployment = "monitorChangesPendingDeployment"
            case monitorDeployment = "monitorDeployment"
            case name = "name"
            case status = "status"
            case tags = "tags"
        }
    }

    public struct StaticImageActivateScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        /// The duration in milliseconds for the image to remain on the video. If omitted or set to 0 the duration is unlimited and the image will remain until it is explicitly deactivated.
        public let duration: Int?
        /// The time in milliseconds for the image to fade in. The fade-in starts at the start time of the overlay. Default is 0 (no fade-in).
        public let fadeIn: Int?
        /// Applies only if a duration is specified. The time in milliseconds for the image to fade out. The fade-out starts when the duration time is hit, so it effectively extends the duration. Default is 0 (no fade-out).
        public let fadeOut: Int?
        /// The height of the image when inserted into the video, in pixels. The overlay will be scaled up or down to the specified height. Leave blank to use the native height of the overlay.
        public let height: Int?
        /// The location and filename of the image file to overlay on the video. The file must be a 32-bit BMP, PNG, or TGA file, and must not be larger (in pixels) than the input video.
        public let image: InputLocation?
        /// Placement of the left edge of the overlay relative to the left edge of the video frame, in pixels. 0 (the default) is the left edge of the frame. If the placement causes the overlay to extend beyond the right edge of the underlying video, then the overlay is cropped on the right.
        public let imageX: Int?
        /// Placement of the top edge of the overlay relative to the top edge of the video frame, in pixels. 0 (the default) is the top edge of the frame. If the placement causes the overlay to extend beyond the bottom edge of the underlying video, then the overlay is cropped on the bottom.
        public let imageY: Int?
        /// The number of the layer, 0 to 7. There are 8 layers that can be overlaid on the video, each layer with a different image. The layers are in Z order, which means that overlays with higher values of layer are inserted on top of overlays with lower values of layer. Default is 0.
        public let layer: Int?
        /// Opacity of image where 0 is transparent and 100 is fully opaque. Default is 100.
        public let opacity: Int?
        /// The width of the image when inserted into the video, in pixels. The overlay will be scaled up or down to the specified width. Leave blank to use the native width of the overlay.
        public let width: Int?

        @inlinable
        public init(duration: Int? = nil, fadeIn: Int? = nil, fadeOut: Int? = nil, height: Int? = nil, image: InputLocation? = nil, imageX: Int? = nil, imageY: Int? = nil, layer: Int? = nil, opacity: Int? = nil, width: Int? = nil) {
            self.duration = duration
            self.fadeIn = fadeIn
            self.fadeOut = fadeOut
            self.height = height
            self.image = image
            self.imageX = imageX
            self.imageY = imageY
            self.layer = layer
            self.opacity = opacity
            self.width = width
        }

        public func validate(name: String) throws {
            try self.validate(self.duration, name: "duration", parent: name, min: 0)
            try self.validate(self.fadeIn, name: "fadeIn", parent: name, min: 0)
            try self.validate(self.fadeOut, name: "fadeOut", parent: name, min: 0)
            try self.validate(self.height, name: "height", parent: name, min: 1)
            try self.image?.validate(name: "\(name).image")
            try self.validate(self.imageX, name: "imageX", parent: name, min: 0)
            try self.validate(self.imageY, name: "imageY", parent: name, min: 0)
            try self.validate(self.layer, name: "layer", parent: name, max: 7)
            try self.validate(self.layer, name: "layer", parent: name, min: 0)
            try self.validate(self.opacity, name: "opacity", parent: name, max: 100)
            try self.validate(self.opacity, name: "opacity", parent: name, min: 0)
            try self.validate(self.width, name: "width", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case duration = "duration"
            case fadeIn = "fadeIn"
            case fadeOut = "fadeOut"
            case height = "height"
            case image = "image"
            case imageX = "imageX"
            case imageY = "imageY"
            case layer = "layer"
            case opacity = "opacity"
            case width = "width"
        }
    }

    public struct StaticImageDeactivateScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        /// The time in milliseconds for the image to fade out. Default is 0 (no fade-out).
        public let fadeOut: Int?
        /// The image overlay layer to deactivate, 0 to 7. Default is 0.
        public let layer: Int?

        @inlinable
        public init(fadeOut: Int? = nil, layer: Int? = nil) {
            self.fadeOut = fadeOut
            self.layer = layer
        }

        public func validate(name: String) throws {
            try self.validate(self.fadeOut, name: "fadeOut", parent: name, min: 0)
            try self.validate(self.layer, name: "layer", parent: name, max: 7)
            try self.validate(self.layer, name: "layer", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case fadeOut = "fadeOut"
            case layer = "layer"
        }
    }

    public struct StaticImageOutputActivateScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        /// The duration in milliseconds for the image to remain on the video. If omitted or set to 0 the duration is unlimited and the image will remain until it is explicitly deactivated.
        public let duration: Int?
        /// The time in milliseconds for the image to fade in. The fade-in starts at the start time of the overlay. Default is 0 (no fade-in).
        public let fadeIn: Int?
        /// Applies only if a duration is specified. The time in milliseconds for the image to fade out. The fade-out starts when the duration time is hit, so it effectively extends the duration. Default is 0 (no fade-out).
        public let fadeOut: Int?
        /// The height of the image when inserted into the video, in pixels. The overlay will be scaled up or down to the specified height. Leave blank to use the native height of the overlay.
        public let height: Int?
        /// The location and filename of the image file to overlay on the video. The file must be a 32-bit BMP, PNG, or TGA file, and must not be larger (in pixels) than the input video.
        public let image: InputLocation?
        /// Placement of the left edge of the overlay relative to the left edge of the video frame, in pixels. 0 (the default) is the left edge of the frame. If the placement causes the overlay to extend beyond the right edge of the underlying video, then the overlay is cropped on the right.
        public let imageX: Int?
        /// Placement of the top edge of the overlay relative to the top edge of the video frame, in pixels. 0 (the default) is the top edge of the frame. If the placement causes the overlay to extend beyond the bottom edge of the underlying video, then the overlay is cropped on the bottom.
        public let imageY: Int?
        /// The number of the layer, 0 to 7. There are 8 layers that can be overlaid on the video, each layer with a different image. The layers are in Z order, which means that overlays with higher values of layer are inserted on top of overlays with lower values of layer. Default is 0.
        public let layer: Int?
        /// Opacity of image where 0 is transparent and 100 is fully opaque. Default is 100.
        public let opacity: Int?
        /// The name(s) of the output(s) the activation should apply to.
        public let outputNames: [String]?
        /// The width of the image when inserted into the video, in pixels. The overlay will be scaled up or down to the specified width. Leave blank to use the native width of the overlay.
        public let width: Int?

        @inlinable
        public init(duration: Int? = nil, fadeIn: Int? = nil, fadeOut: Int? = nil, height: Int? = nil, image: InputLocation? = nil, imageX: Int? = nil, imageY: Int? = nil, layer: Int? = nil, opacity: Int? = nil, outputNames: [String]? = nil, width: Int? = nil) {
            self.duration = duration
            self.fadeIn = fadeIn
            self.fadeOut = fadeOut
            self.height = height
            self.image = image
            self.imageX = imageX
            self.imageY = imageY
            self.layer = layer
            self.opacity = opacity
            self.outputNames = outputNames
            self.width = width
        }

        public func validate(name: String) throws {
            try self.validate(self.duration, name: "duration", parent: name, min: 0)
            try self.validate(self.fadeIn, name: "fadeIn", parent: name, min: 0)
            try self.validate(self.fadeOut, name: "fadeOut", parent: name, min: 0)
            try self.validate(self.height, name: "height", parent: name, min: 1)
            try self.image?.validate(name: "\(name).image")
            try self.validate(self.imageX, name: "imageX", parent: name, min: 0)
            try self.validate(self.imageY, name: "imageY", parent: name, min: 0)
            try self.validate(self.layer, name: "layer", parent: name, max: 7)
            try self.validate(self.layer, name: "layer", parent: name, min: 0)
            try self.validate(self.opacity, name: "opacity", parent: name, max: 100)
            try self.validate(self.opacity, name: "opacity", parent: name, min: 0)
            try self.validate(self.width, name: "width", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case duration = "duration"
            case fadeIn = "fadeIn"
            case fadeOut = "fadeOut"
            case height = "height"
            case image = "image"
            case imageX = "imageX"
            case imageY = "imageY"
            case layer = "layer"
            case opacity = "opacity"
            case outputNames = "outputNames"
            case width = "width"
        }
    }

    public struct StaticImageOutputDeactivateScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        /// The time in milliseconds for the image to fade out. Default is 0 (no fade-out).
        public let fadeOut: Int?
        /// The image overlay layer to deactivate, 0 to 7. Default is 0.
        public let layer: Int?
        /// The name(s) of the output(s) the deactivation should apply to.
        public let outputNames: [String]?

        @inlinable
        public init(fadeOut: Int? = nil, layer: Int? = nil, outputNames: [String]? = nil) {
            self.fadeOut = fadeOut
            self.layer = layer
            self.outputNames = outputNames
        }

        public func validate(name: String) throws {
            try self.validate(self.fadeOut, name: "fadeOut", parent: name, min: 0)
            try self.validate(self.layer, name: "layer", parent: name, max: 7)
            try self.validate(self.layer, name: "layer", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case fadeOut = "fadeOut"
            case layer = "layer"
            case outputNames = "outputNames"
        }
    }

    public struct StaticKeySettings: AWSEncodableShape & AWSDecodableShape {
        /// The URL of the license server used for protecting content.
        public let keyProviderServer: InputLocation?
        /// Static key value as a 32 character hexadecimal string.
        public let staticKeyValue: String?

        @inlinable
        public init(keyProviderServer: InputLocation? = nil, staticKeyValue: String? = nil) {
            self.keyProviderServer = keyProviderServer
            self.staticKeyValue = staticKeyValue
        }

        public func validate(name: String) throws {
            try self.keyProviderServer?.validate(name: "\(name).keyProviderServer")
            try self.validate(self.staticKeyValue, name: "staticKeyValue", parent: name, max: 32)
            try self.validate(self.staticKeyValue, name: "staticKeyValue", parent: name, min: 32)
        }

        private enum CodingKeys: String, CodingKey {
            case keyProviderServer = "keyProviderServer"
            case staticKeyValue = "staticKeyValue"
        }
    }

    public struct StopChannelRequest: AWSEncodableShape {
        /// A request to stop a running channel
        public let channelId: String

        @inlinable
        public init(channelId: String) {
            self.channelId = channelId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.channelId, key: "ChannelId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct StopChannelResponse: AWSDecodableShape {
        /// Anywhere settings for this channel.
        public let anywhereSettings: DescribeAnywhereSettings?
        /// The unique arn of the channel.
        public let arn: String?
        /// Specification of CDI inputs for this channel
        public let cdiInputSpecification: CdiInputSpecification?
        /// The class for this channel. STANDARD for a channel with two pipelines or SINGLE_PIPELINE for a channel with one pipeline.
        public let channelClass: ChannelClass?
        /// Requested engine version for this channel.
        public let channelEngineVersion: ChannelEngineVersionResponse?
        /// A list of destinations of the channel. For UDP outputs, there is one
        /// destination per output. For other types (HLS, for example), there is
        /// one destination per packager.
        public let destinations: [OutputDestination]?
        /// The endpoints where outgoing connections initiate from
        public let egressEndpoints: [ChannelEgressEndpoint]?
        public let encoderSettings: EncoderSettings?
        /// The unique id of the channel.
        public let id: String?
        /// List of input attachments for channel.
        public let inputAttachments: [InputAttachment]?
        /// Specification of network and file inputs for this channel
        public let inputSpecification: InputSpecification?
        /// The log level being written to CloudWatch Logs.
        public let logLevel: LogLevel?
        /// Maintenance settings for this channel.
        public let maintenance: MaintenanceStatus?
        /// The name of the channel. (user-mutable)
        public let name: String?
        /// Runtime details for the pipelines of a running channel.
        public let pipelineDetails: [PipelineDetail]?
        /// The number of currently healthy pipelines.
        public let pipelinesRunningCount: Int?
        /// The Amazon Resource Name (ARN) of the role assumed when running the Channel.
        public let roleArn: String?
        public let state: ChannelState?
        /// A collection of key-value pairs.
        public let tags: [String: String]?
        /// Settings for VPC output
        public let vpc: VpcOutputSettingsDescription?

        @inlinable
        public init(anywhereSettings: DescribeAnywhereSettings? = nil, arn: String? = nil, cdiInputSpecification: CdiInputSpecification? = nil, channelClass: ChannelClass? = nil, channelEngineVersion: ChannelEngineVersionResponse? = nil, destinations: [OutputDestination]? = nil, egressEndpoints: [ChannelEgressEndpoint]? = nil, encoderSettings: EncoderSettings? = nil, id: String? = nil, inputAttachments: [InputAttachment]? = nil, inputSpecification: InputSpecification? = nil, logLevel: LogLevel? = nil, maintenance: MaintenanceStatus? = nil, name: String? = nil, pipelineDetails: [PipelineDetail]? = nil, pipelinesRunningCount: Int? = nil, roleArn: String? = nil, state: ChannelState? = nil, tags: [String: String]? = nil, vpc: VpcOutputSettingsDescription? = nil) {
            self.anywhereSettings = anywhereSettings
            self.arn = arn
            self.cdiInputSpecification = cdiInputSpecification
            self.channelClass = channelClass
            self.channelEngineVersion = channelEngineVersion
            self.destinations = destinations
            self.egressEndpoints = egressEndpoints
            self.encoderSettings = encoderSettings
            self.id = id
            self.inputAttachments = inputAttachments
            self.inputSpecification = inputSpecification
            self.logLevel = logLevel
            self.maintenance = maintenance
            self.name = name
            self.pipelineDetails = pipelineDetails
            self.pipelinesRunningCount = pipelinesRunningCount
            self.roleArn = roleArn
            self.state = state
            self.tags = tags
            self.vpc = vpc
        }

        private enum CodingKeys: String, CodingKey {
            case anywhereSettings = "anywhereSettings"
            case arn = "arn"
            case cdiInputSpecification = "cdiInputSpecification"
            case channelClass = "channelClass"
            case channelEngineVersion = "channelEngineVersion"
            case destinations = "destinations"
            case egressEndpoints = "egressEndpoints"
            case encoderSettings = "encoderSettings"
            case id = "id"
            case inputAttachments = "inputAttachments"
            case inputSpecification = "inputSpecification"
            case logLevel = "logLevel"
            case maintenance = "maintenance"
            case name = "name"
            case pipelineDetails = "pipelineDetails"
            case pipelinesRunningCount = "pipelinesRunningCount"
            case roleArn = "roleArn"
            case state = "state"
            case tags = "tags"
            case vpc = "vpc"
        }
    }

    public struct StopInputDeviceRequest: AWSEncodableShape {
        /// The unique ID of the input device to stop. For example, hd-123456789abcdef.
        public let inputDeviceId: String

        @inlinable
        public init(inputDeviceId: String) {
            self.inputDeviceId = inputDeviceId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.inputDeviceId, key: "InputDeviceId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct StopInputDeviceResponse: AWSDecodableShape {
        public init() {}
    }

    public struct StopMultiplexRequest: AWSEncodableShape {
        /// The ID of the multiplex.
        public let multiplexId: String

        @inlinable
        public init(multiplexId: String) {
            self.multiplexId = multiplexId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            _ = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.multiplexId, key: "MultiplexId")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct StopMultiplexResponse: AWSDecodableShape {
        /// The unique arn of the multiplex.
        public let arn: String?
        /// A list of availability zones for the multiplex.
        public let availabilityZones: [String]?
        /// A list of the multiplex output destinations.
        public let destinations: [MultiplexOutputDestination]?
        /// The unique id of the multiplex.
        public let id: String?
        /// Configuration for a multiplex event.
        public let multiplexSettings: MultiplexSettings?
        /// The name of the multiplex.
        public let name: String?
        /// The number of currently healthy pipelines.
        public let pipelinesRunningCount: Int?
        /// The number of programs in the multiplex.
        public let programCount: Int?
        /// The current state of the multiplex.
        public let state: MultiplexState?
        /// A collection of key-value pairs.
        public let tags: [String: String]?

        @inlinable
        public init(arn: String? = nil, availabilityZones: [String]? = nil, destinations: [MultiplexOutputDestination]? = nil, id: String? = nil, multiplexSettings: MultiplexSettings? = nil, name: String? = nil, pipelinesRunningCount: Int? = nil, programCount: Int? = nil, state: MultiplexState? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.availabilityZones = availabilityZones
            self.destinations = destinations
            self.id = id
            self.multiplexSettings = multiplexSettings
            self.name = name
            self.pipelinesRunningCount = pipelinesRunningCount
            self.programCount = programCount
            self.state = state
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case availabilityZones = "availabilityZones"
            case destinations = "destinations"
            case id = "id"
            case multiplexSettings = "multiplexSettings"
            case name = "name"
            case pipelinesRunningCount = "pipelinesRunningCount"
            case programCount = "programCount"
            case state = "state"
            case tags = "tags"
        }
    }

    public struct StopTimecode: AWSEncodableShape & AWSDecodableShape {
        /// If you specify a StopTimecode in an input (in order to clip the file), you can specify if you want the clip to exclude (the default) or include the frame specified by the timecode.
        public let lastFrameClippingBehavior: LastFrameClippingBehavior?
        /// The timecode for the frame where you want to stop the clip. Optional; if not specified, the clip continues to the end of the file. Enter the timecode as HH:MM:SS:FF or HH:MM:SS;FF.
        public let timecode: String?

        @inlinable
        public init(lastFrameClippingBehavior: LastFrameClippingBehavior? = nil, timecode: String? = nil) {
            self.lastFrameClippingBehavior = lastFrameClippingBehavior
            self.timecode = timecode
        }

        private enum CodingKeys: String, CodingKey {
            case lastFrameClippingBehavior = "lastFrameClippingBehavior"
            case timecode = "timecode"
        }
    }

    public struct SuccessfulMonitorDeployment: AWSDecodableShape {
        /// URI associated with a signal map's monitor deployment.
        public let detailsUri: String?
        public let status: SignalMapMonitorDeploymentStatus?

        @inlinable
        public init(detailsUri: String? = nil, status: SignalMapMonitorDeploymentStatus? = nil) {
            self.detailsUri = detailsUri
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case detailsUri = "detailsUri"
            case status = "status"
        }
    }

    public struct TeletextDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        public init() {}
    }

    public struct TeletextSourceSettings: AWSEncodableShape & AWSDecodableShape {
        /// Optionally defines a region where TTML style captions will be displayed
        public let outputRectangle: CaptionRectangle?
        /// Specifies the teletext page number within the data stream from which to extract captions. Range of 0x100 (256) to 0x8FF (2303). Unused for passthrough. Should be specified as a hexadecimal string with no "0x" prefix.
        public let pageNumber: String?

        @inlinable
        public init(outputRectangle: CaptionRectangle? = nil, pageNumber: String? = nil) {
            self.outputRectangle = outputRectangle
            self.pageNumber = pageNumber
        }

        private enum CodingKeys: String, CodingKey {
            case outputRectangle = "outputRectangle"
            case pageNumber = "pageNumber"
        }
    }

    public struct TemporalFilterSettings: AWSEncodableShape & AWSDecodableShape {
        /// If you enable this filter, the results are the following:
        /// - If the source content is noisy (it contains excessive digital artifacts), the filter cleans up the source.
        /// - If the source content is already clean, the filter tends to decrease the bitrate, especially when the rate control mode is QVBR.
        public let postFilterSharpening: TemporalFilterPostFilterSharpening?
        /// Choose a filter strength. We recommend a strength of 1 or 2. A higher strength might take out good information, resulting in an image that is overly soft.
        public let strength: TemporalFilterStrength?

        @inlinable
        public init(postFilterSharpening: TemporalFilterPostFilterSharpening? = nil, strength: TemporalFilterStrength? = nil) {
            self.postFilterSharpening = postFilterSharpening
            self.strength = strength
        }

        private enum CodingKeys: String, CodingKey {
            case postFilterSharpening = "postFilterSharpening"
            case strength = "strength"
        }
    }

    public struct Thumbnail: AWSDecodableShape {
        /// The binary data for the latest thumbnail.
        public let body: String?
        /// The content type for the latest thumbnail.
        public let contentType: String?
        /// Thumbnail Type
        public let thumbnailType: ThumbnailType?
        /// Time stamp for the latest thumbnail.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var timeStamp: Date?

        @inlinable
        public init(body: String? = nil, contentType: String? = nil, thumbnailType: ThumbnailType? = nil, timeStamp: Date? = nil) {
            self.body = body
            self.contentType = contentType
            self.thumbnailType = thumbnailType
            self.timeStamp = timeStamp
        }

        private enum CodingKeys: String, CodingKey {
            case body = "body"
            case contentType = "contentType"
            case thumbnailType = "thumbnailType"
            case timeStamp = "timeStamp"
        }
    }

    public struct ThumbnailConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// Enables the thumbnail feature. The feature generates thumbnails of the incoming video in each pipeline in the channel. AUTO turns the feature on, DISABLE turns the feature off.
        public let state: ThumbnailState?

        @inlinable
        public init(state: ThumbnailState? = nil) {
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case state = "state"
        }
    }

    public struct ThumbnailDetail: AWSDecodableShape {
        /// Pipeline ID
        public let pipelineId: String?
        /// thumbnails of a single pipeline
        public let thumbnails: [Thumbnail]?

        @inlinable
        public init(pipelineId: String? = nil, thumbnails: [Thumbnail]? = nil) {
            self.pipelineId = pipelineId
            self.thumbnails = thumbnails
        }

        private enum CodingKeys: String, CodingKey {
            case pipelineId = "pipelineId"
            case thumbnails = "thumbnails"
        }
    }

    public struct TimecodeBurninSettings: AWSEncodableShape & AWSDecodableShape {
        /// Choose a timecode burn-in font size
        public let fontSize: TimecodeBurninFontSize?
        /// Choose a timecode burn-in output position
        public let position: TimecodeBurninPosition?
        /// Create a timecode burn-in prefix (optional)
        public let prefix: String?

        @inlinable
        public init(fontSize: TimecodeBurninFontSize? = nil, position: TimecodeBurninPosition? = nil, prefix: String? = nil) {
            self.fontSize = fontSize
            self.position = position
            self.prefix = prefix
        }

        public func validate(name: String) throws {
            try self.validate(self.prefix, name: "prefix", parent: name, max: 255)
        }

        private enum CodingKeys: String, CodingKey {
            case fontSize = "fontSize"
            case position = "position"
            case prefix = "prefix"
        }
    }

    public struct TimecodeConfig: AWSEncodableShape & AWSDecodableShape {
        /// Identifies the source for the timecode that will be associated with the events outputs.
        /// -Embedded (embedded): Initialize the output timecode with timecode from the the source.  If no embedded timecode is detected in the source, the system falls back to using "Start at 0" (zerobased).
        /// -System Clock (systemclock): Use the UTC time.
        /// -Start at 0 (zerobased): The time of the first frame of the event will be 00:00:00:00.
        public let source: TimecodeConfigSource?
        /// Threshold in frames beyond which output timecode is resynchronized to the input timecode. Discrepancies below this threshold are permitted to avoid unnecessary discontinuities in the output timecode. No timecode sync when this is not specified.
        public let syncThreshold: Int?

        @inlinable
        public init(source: TimecodeConfigSource? = nil, syncThreshold: Int? = nil) {
            self.source = source
            self.syncThreshold = syncThreshold
        }

        public func validate(name: String) throws {
            try self.validate(self.syncThreshold, name: "syncThreshold", parent: name, max: 1000000)
            try self.validate(self.syncThreshold, name: "syncThreshold", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case source = "source"
            case syncThreshold = "syncThreshold"
        }
    }

    public struct TimedMetadataScheduleActionSettings: AWSEncodableShape & AWSDecodableShape {
        /// Enter a base64 string that contains one or more fully formed ID3 tags.See the ID3 specification: http://id3.org/id3v2.4.0-structure
        public let id3: String?

        @inlinable
        public init(id3: String? = nil) {
            self.id3 = id3
        }

        private enum CodingKeys: String, CodingKey {
            case id3 = "id3"
        }
    }

    public struct TransferInputDeviceRequest: AWSEncodableShape {
        /// The unique ID of this input device. For example, hd-123456789abcdef.
        public let inputDeviceId: String
        /// The AWS account ID (12 digits) for the recipient of the device transfer.
        public let targetCustomerId: String?
        /// The target AWS region to transfer the device.
        public let targetRegion: String?
        /// An optional message for the recipient. Maximum 280 characters.
        public let transferMessage: String?

        @inlinable
        public init(inputDeviceId: String, targetCustomerId: String? = nil, targetRegion: String? = nil, transferMessage: String? = nil) {
            self.inputDeviceId = inputDeviceId
            self.targetCustomerId = targetCustomerId
            self.targetRegion = targetRegion
            self.transferMessage = transferMessage
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.inputDeviceId, key: "InputDeviceId")
            try container.encodeIfPresent(self.targetCustomerId, forKey: .targetCustomerId)
            try container.encodeIfPresent(self.targetRegion, forKey: .targetRegion)
            try container.encodeIfPresent(self.transferMessage, forKey: .transferMessage)
        }

        private enum CodingKeys: String, CodingKey {
            case targetCustomerId = "targetCustomerId"
            case targetRegion = "targetRegion"
            case transferMessage = "transferMessage"
        }
    }

    public struct TransferInputDeviceResponse: AWSDecodableShape {
        public init() {}
    }

    public struct TransferringInputDeviceSummary: AWSDecodableShape {
        /// The unique ID of the input device.
        public let id: String?
        /// The optional message that the sender has attached to the transfer.
        public let message: String?
        /// The AWS account ID for the recipient of the input device transfer.
        public let targetCustomerId: String?
        /// The type (direction) of the input device transfer.
        public let transferType: InputDeviceTransferType?

        @inlinable
        public init(id: String? = nil, message: String? = nil, targetCustomerId: String? = nil, transferType: InputDeviceTransferType? = nil) {
            self.id = id
            self.message = message
            self.targetCustomerId = targetCustomerId
            self.transferType = transferType
        }

        private enum CodingKeys: String, CodingKey {
            case id = "id"
            case message = "message"
            case targetCustomerId = "targetCustomerId"
            case transferType = "transferType"
        }
    }

    public struct TtmlDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        /// This field is not currently supported and will not affect the output styling. Leave the default value.
        public let styleControl: TtmlDestinationStyleControl?

        @inlinable
        public init(styleControl: TtmlDestinationStyleControl? = nil) {
            self.styleControl = styleControl
        }

        private enum CodingKeys: String, CodingKey {
            case styleControl = "styleControl"
        }
    }

    public struct UdpContainerSettings: AWSEncodableShape & AWSDecodableShape {
        public let m2tsSettings: M2tsSettings?

        @inlinable
        public init(m2tsSettings: M2tsSettings? = nil) {
            self.m2tsSettings = m2tsSettings
        }

        public func validate(name: String) throws {
            try self.m2tsSettings?.validate(name: "\(name).m2tsSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case m2tsSettings = "m2tsSettings"
        }
    }

    public struct UdpGroupSettings: AWSEncodableShape & AWSDecodableShape {
        /// Specifies behavior of last resort when input video is lost, and no more backup inputs are available. When dropTs is selected the entire transport stream will stop being emitted.  When dropProgram is selected the program can be dropped from the transport stream (and replaced with null packets to meet the TS bitrate requirement).  Or, when emitProgram is chosen the transport stream will continue to be produced normally with repeat frames, black frames, or slate frames substituted for the absent input video.
        public let inputLossAction: InputLossActionForUdpOut?
        /// Indicates ID3 frame that has the timecode.
        public let timedMetadataId3Frame: UdpTimedMetadataId3Frame?
        /// Timed Metadata interval in seconds.
        public let timedMetadataId3Period: Int?

        @inlinable
        public init(inputLossAction: InputLossActionForUdpOut? = nil, timedMetadataId3Frame: UdpTimedMetadataId3Frame? = nil, timedMetadataId3Period: Int? = nil) {
            self.inputLossAction = inputLossAction
            self.timedMetadataId3Frame = timedMetadataId3Frame
            self.timedMetadataId3Period = timedMetadataId3Period
        }

        public func validate(name: String) throws {
            try self.validate(self.timedMetadataId3Period, name: "timedMetadataId3Period", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case inputLossAction = "inputLossAction"
            case timedMetadataId3Frame = "timedMetadataId3Frame"
            case timedMetadataId3Period = "timedMetadataId3Period"
        }
    }

    public struct UdpOutputSettings: AWSEncodableShape & AWSDecodableShape {
        /// UDP output buffering in milliseconds. Larger values increase latency through the transcoder but simultaneously assist the transcoder in maintaining a constant, low-jitter UDP/RTP output while accommodating clock recovery, input switching, input disruptions, picture reordering, etc.
        public let bufferMsec: Int?
        public let containerSettings: UdpContainerSettings?
        /// Destination address and port number for RTP or UDP packets. Can be unicast or multicast RTP or UDP (eg. rtp://239.10.10.10:5001 or udp://10.100.100.100:5002).
        public let destination: OutputLocationRef?
        /// Settings for enabling and adjusting Forward Error Correction on UDP outputs.
        public let fecOutputSettings: FecOutputSettings?

        @inlinable
        public init(bufferMsec: Int? = nil, containerSettings: UdpContainerSettings? = nil, destination: OutputLocationRef? = nil, fecOutputSettings: FecOutputSettings? = nil) {
            self.bufferMsec = bufferMsec
            self.containerSettings = containerSettings
            self.destination = destination
            self.fecOutputSettings = fecOutputSettings
        }

        public func validate(name: String) throws {
            try self.validate(self.bufferMsec, name: "bufferMsec", parent: name, max: 10000)
            try self.validate(self.bufferMsec, name: "bufferMsec", parent: name, min: 0)
            try self.containerSettings?.validate(name: "\(name).containerSettings")
            try self.fecOutputSettings?.validate(name: "\(name).fecOutputSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case bufferMsec = "bufferMsec"
            case containerSettings = "containerSettings"
            case destination = "destination"
            case fecOutputSettings = "fecOutputSettings"
        }
    }

    public struct UnprocessableEntityException: AWSErrorShape {
        /// The error message.
        public let message: String?
        /// A collection of validation error responses.
        public let validationErrors: [ValidationError]?

        @inlinable
        public init(message: String? = nil, validationErrors: [ValidationError]? = nil) {
            self.message = message
            self.validationErrors = validationErrors
        }

        private enum CodingKeys: String, CodingKey {
            case message = "message"
            case validationErrors = "validationErrors"
        }
    }

    public struct UpdateAccountConfigurationRequest: AWSEncodableShape {
        public let accountConfiguration: AccountConfiguration?

        @inlinable
        public init(accountConfiguration: AccountConfiguration? = nil) {
            self.accountConfiguration = accountConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case accountConfiguration = "accountConfiguration"
        }
    }

    public struct UpdateAccountConfigurationResponse: AWSDecodableShape {
        public let accountConfiguration: AccountConfiguration?

        @inlinable
        public init(accountConfiguration: AccountConfiguration? = nil) {
            self.accountConfiguration = accountConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case accountConfiguration = "accountConfiguration"
        }
    }

    public struct UpdateChannelClassRequest: AWSEncodableShape {
        /// The channel class that you wish to update this channel to use.
        public let channelClass: ChannelClass?
        /// Channel Id of the channel whose class should be updated.
        public let channelId: String
        /// A list of output destinations for this channel.
        public let destinations: [OutputDestination]?

        @inlinable
        public init(channelClass: ChannelClass? = nil, channelId: String, destinations: [OutputDestination]? = nil) {
            self.channelClass = channelClass
            self.channelId = channelId
            self.destinations = destinations
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            try container.encodeIfPresent(self.channelClass, forKey: .channelClass)
            request.encodePath(self.channelId, key: "ChannelId")
            try container.encodeIfPresent(self.destinations, forKey: .destinations)
        }

        public func validate(name: String) throws {
            try self.destinations?.forEach {
                try $0.validate(name: "\(name).destinations[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case channelClass = "channelClass"
            case destinations = "destinations"
        }
    }

    public struct UpdateChannelClassResponse: AWSDecodableShape {
        public let channel: Channel?

        @inlinable
        public init(channel: Channel? = nil) {
            self.channel = channel
        }

        private enum CodingKeys: String, CodingKey {
            case channel = "channel"
        }
    }

    public struct UpdateChannelPlacementGroupRequest: AWSEncodableShape {
        /// The ID of the channel placement group.
        public let channelPlacementGroupId: String
        /// The ID of the cluster.
        public let clusterId: String
        /// Include this parameter only if you want to change the current name of the ChannelPlacementGroup. Specify a name that is unique in the Cluster. You can't change the name. Names are case-sensitive.
        public let name: String?
        /// Include this parameter only if you want to change the list of Nodes that are associated with the ChannelPlacementGroup.
        public let nodes: [String]?

        @inlinable
        public init(channelPlacementGroupId: String, clusterId: String, name: String? = nil, nodes: [String]? = nil) {
            self.channelPlacementGroupId = channelPlacementGroupId
            self.clusterId = clusterId
            self.name = name
            self.nodes = nodes
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.channelPlacementGroupId, key: "ChannelPlacementGroupId")
            request.encodePath(self.clusterId, key: "ClusterId")
            try container.encodeIfPresent(self.name, forKey: .name)
            try container.encodeIfPresent(self.nodes, forKey: .nodes)
        }

        private enum CodingKeys: String, CodingKey {
            case name = "name"
            case nodes = "nodes"
        }
    }

    public struct UpdateChannelPlacementGroupResponse: AWSDecodableShape {
        /// The ARN of this ChannelPlacementGroup. It is automatically assigned when the ChannelPlacementGroup is created.
        public let arn: String?
        /// Used in ListChannelPlacementGroupsResult
        public let channels: [String]?
        /// The ID of the Cluster that the Node belongs to.
        public let clusterId: String?
        /// The ID of the ChannelPlacementGroup. Unique in the AWS account. The ID is the resource-id portion of the ARN.
        public let id: String?
        /// The name that you specified for the ChannelPlacementGroup.
        public let name: String?
        /// An array with one item, which is the single Node that is associated with the ChannelPlacementGroup.
        public let nodes: [String]?
        /// The current state of the ChannelPlacementGroup.
        public let state: ChannelPlacementGroupState?

        @inlinable
        public init(arn: String? = nil, channels: [String]? = nil, clusterId: String? = nil, id: String? = nil, name: String? = nil, nodes: [String]? = nil, state: ChannelPlacementGroupState? = nil) {
            self.arn = arn
            self.channels = channels
            self.clusterId = clusterId
            self.id = id
            self.name = name
            self.nodes = nodes
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case channels = "channels"
            case clusterId = "clusterId"
            case id = "id"
            case name = "name"
            case nodes = "nodes"
            case state = "state"
        }
    }

    public struct UpdateChannelRequest: AWSEncodableShape {
        /// The Elemental Anywhere settings for this channel.
        public let anywhereSettings: AnywhereSettings?
        /// Specification of CDI inputs for this channel
        public let cdiInputSpecification: CdiInputSpecification?
        /// Channel engine version for this channel
        public let channelEngineVersion: ChannelEngineVersionRequest?
        /// channel ID
        public let channelId: String
        /// A list of output destinations for this channel.
        public let destinations: [OutputDestination]?
        public let dryRun: Bool?
        /// The encoder settings for this channel.
        public let encoderSettings: EncoderSettings?
        public let inputAttachments: [InputAttachment]?
        /// Specification of network and file inputs for this channel
        public let inputSpecification: InputSpecification?
        /// The log level to write to CloudWatch Logs.
        public let logLevel: LogLevel?
        /// Maintenance settings for this channel.
        public let maintenance: MaintenanceUpdateSettings?
        /// The name of the channel.
        public let name: String?
        /// An optional Amazon Resource Name (ARN) of the role to assume when running the Channel. If you do not specify this on an update call but the role was previously set that role will be removed.
        public let roleArn: String?

        @inlinable
        public init(anywhereSettings: AnywhereSettings? = nil, cdiInputSpecification: CdiInputSpecification? = nil, channelEngineVersion: ChannelEngineVersionRequest? = nil, channelId: String, destinations: [OutputDestination]? = nil, dryRun: Bool? = nil, encoderSettings: EncoderSettings? = nil, inputAttachments: [InputAttachment]? = nil, inputSpecification: InputSpecification? = nil, logLevel: LogLevel? = nil, maintenance: MaintenanceUpdateSettings? = nil, name: String? = nil, roleArn: String? = nil) {
            self.anywhereSettings = anywhereSettings
            self.cdiInputSpecification = cdiInputSpecification
            self.channelEngineVersion = channelEngineVersion
            self.channelId = channelId
            self.destinations = destinations
            self.dryRun = dryRun
            self.encoderSettings = encoderSettings
            self.inputAttachments = inputAttachments
            self.inputSpecification = inputSpecification
            self.logLevel = logLevel
            self.maintenance = maintenance
            self.name = name
            self.roleArn = roleArn
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            try container.encodeIfPresent(self.anywhereSettings, forKey: .anywhereSettings)
            try container.encodeIfPresent(self.cdiInputSpecification, forKey: .cdiInputSpecification)
            try container.encodeIfPresent(self.channelEngineVersion, forKey: .channelEngineVersion)
            request.encodePath(self.channelId, key: "ChannelId")
            try container.encodeIfPresent(self.destinations, forKey: .destinations)
            try container.encodeIfPresent(self.dryRun, forKey: .dryRun)
            try container.encodeIfPresent(self.encoderSettings, forKey: .encoderSettings)
            try container.encodeIfPresent(self.inputAttachments, forKey: .inputAttachments)
            try container.encodeIfPresent(self.inputSpecification, forKey: .inputSpecification)
            try container.encodeIfPresent(self.logLevel, forKey: .logLevel)
            try container.encodeIfPresent(self.maintenance, forKey: .maintenance)
            try container.encodeIfPresent(self.name, forKey: .name)
            try container.encodeIfPresent(self.roleArn, forKey: .roleArn)
        }

        public func validate(name: String) throws {
            try self.destinations?.forEach {
                try $0.validate(name: "\(name).destinations[]")
            }
            try self.encoderSettings?.validate(name: "\(name).encoderSettings")
            try self.inputAttachments?.forEach {
                try $0.validate(name: "\(name).inputAttachments[]")
            }
            try self.maintenance?.validate(name: "\(name).maintenance")
        }

        private enum CodingKeys: String, CodingKey {
            case anywhereSettings = "anywhereSettings"
            case cdiInputSpecification = "cdiInputSpecification"
            case channelEngineVersion = "channelEngineVersion"
            case destinations = "destinations"
            case dryRun = "dryRun"
            case encoderSettings = "encoderSettings"
            case inputAttachments = "inputAttachments"
            case inputSpecification = "inputSpecification"
            case logLevel = "logLevel"
            case maintenance = "maintenance"
            case name = "name"
            case roleArn = "roleArn"
        }
    }

    public struct UpdateChannelResponse: AWSDecodableShape {
        public let channel: Channel?

        @inlinable
        public init(channel: Channel? = nil) {
            self.channel = channel
        }

        private enum CodingKeys: String, CodingKey {
            case channel = "channel"
        }
    }

    public struct UpdateCloudWatchAlarmTemplateGroupRequest: AWSEncodableShape {
        /// A resource's optional description.
        public let description: String?
        /// A cloudwatch alarm template group's identifier. Can be either be its id or current name.
        public let identifier: String

        @inlinable
        public init(description: String? = nil, identifier: String) {
            self.description = description
            self.identifier = identifier
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            try container.encodeIfPresent(self.description, forKey: .description)
            request.encodePath(self.identifier, key: "Identifier")
        }

        public func validate(name: String) throws {
            try self.validate(self.description, name: "description", parent: name, max: 1024)
        }

        private enum CodingKeys: String, CodingKey {
            case description = "description"
        }
    }

    public struct UpdateCloudWatchAlarmTemplateGroupResponse: AWSDecodableShape {
        /// A cloudwatch alarm template group's ARN (Amazon Resource Name)
        public let arn: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdAt: Date?
        /// A resource's optional description.
        public let description: String?
        /// A cloudwatch alarm template group's id. AWS provided template groups have ids that start with `aws-`
        public let id: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var modifiedAt: Date?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        public let tags: [String: String]?

        @inlinable
        public init(arn: String? = nil, createdAt: Date? = nil, description: String? = nil, id: String? = nil, modifiedAt: Date? = nil, name: String? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.createdAt = createdAt
            self.description = description
            self.id = id
            self.modifiedAt = modifiedAt
            self.name = name
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case createdAt = "createdAt"
            case description = "description"
            case id = "id"
            case modifiedAt = "modifiedAt"
            case name = "name"
            case tags = "tags"
        }
    }

    public struct UpdateCloudWatchAlarmTemplateRequest: AWSEncodableShape {
        public let comparisonOperator: CloudWatchAlarmTemplateComparisonOperator?
        /// The number of datapoints within the evaluation period that must be breaching to trigger the alarm.
        public let datapointsToAlarm: Int?
        /// A resource's optional description.
        public let description: String?
        /// The number of periods over which data is compared to the specified threshold.
        public let evaluationPeriods: Int?
        /// A cloudwatch alarm template group's identifier. Can be either be its id or current name.
        public let groupIdentifier: String?
        /// A cloudwatch alarm template's identifier. Can be either be its id or current name.
        public let identifier: String
        /// The name of the metric associated with the alarm. Must be compatible with targetResourceType.
        public let metricName: String?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        /// The period, in seconds, over which the specified statistic is applied.
        public let period: Int?
        public let statistic: CloudWatchAlarmTemplateStatistic?
        public let targetResourceType: CloudWatchAlarmTemplateTargetResourceType?
        /// The threshold value to compare with the specified statistic.
        public let threshold: Double?
        public let treatMissingData: CloudWatchAlarmTemplateTreatMissingData?

        @inlinable
        public init(comparisonOperator: CloudWatchAlarmTemplateComparisonOperator? = nil, datapointsToAlarm: Int? = nil, description: String? = nil, evaluationPeriods: Int? = nil, groupIdentifier: String? = nil, identifier: String, metricName: String? = nil, name: String? = nil, period: Int? = nil, statistic: CloudWatchAlarmTemplateStatistic? = nil, targetResourceType: CloudWatchAlarmTemplateTargetResourceType? = nil, threshold: Double? = nil, treatMissingData: CloudWatchAlarmTemplateTreatMissingData? = nil) {
            self.comparisonOperator = comparisonOperator
            self.datapointsToAlarm = datapointsToAlarm
            self.description = description
            self.evaluationPeriods = evaluationPeriods
            self.groupIdentifier = groupIdentifier
            self.identifier = identifier
            self.metricName = metricName
            self.name = name
            self.period = period
            self.statistic = statistic
            self.targetResourceType = targetResourceType
            self.threshold = threshold
            self.treatMissingData = treatMissingData
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            try container.encodeIfPresent(self.comparisonOperator, forKey: .comparisonOperator)
            try container.encodeIfPresent(self.datapointsToAlarm, forKey: .datapointsToAlarm)
            try container.encodeIfPresent(self.description, forKey: .description)
            try container.encodeIfPresent(self.evaluationPeriods, forKey: .evaluationPeriods)
            try container.encodeIfPresent(self.groupIdentifier, forKey: .groupIdentifier)
            request.encodePath(self.identifier, key: "Identifier")
            try container.encodeIfPresent(self.metricName, forKey: .metricName)
            try container.encodeIfPresent(self.name, forKey: .name)
            try container.encodeIfPresent(self.period, forKey: .period)
            try container.encodeIfPresent(self.statistic, forKey: .statistic)
            try container.encodeIfPresent(self.targetResourceType, forKey: .targetResourceType)
            try container.encodeIfPresent(self.threshold, forKey: .threshold)
            try container.encodeIfPresent(self.treatMissingData, forKey: .treatMissingData)
        }

        public func validate(name: String) throws {
            try self.validate(self.datapointsToAlarm, name: "datapointsToAlarm", parent: name, min: 1)
            try self.validate(self.description, name: "description", parent: name, max: 1024)
            try self.validate(self.evaluationPeriods, name: "evaluationPeriods", parent: name, min: 1)
            try self.validate(self.groupIdentifier, name: "groupIdentifier", parent: name, pattern: "^[^\\s]+$")
            try self.validate(self.metricName, name: "metricName", parent: name, max: 64)
            try self.validate(self.name, name: "name", parent: name, max: 255)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[^\\s]+$")
            try self.validate(self.period, name: "period", parent: name, max: 86400)
            try self.validate(self.period, name: "period", parent: name, min: 10)
        }

        private enum CodingKeys: String, CodingKey {
            case comparisonOperator = "comparisonOperator"
            case datapointsToAlarm = "datapointsToAlarm"
            case description = "description"
            case evaluationPeriods = "evaluationPeriods"
            case groupIdentifier = "groupIdentifier"
            case metricName = "metricName"
            case name = "name"
            case period = "period"
            case statistic = "statistic"
            case targetResourceType = "targetResourceType"
            case threshold = "threshold"
            case treatMissingData = "treatMissingData"
        }
    }

    public struct UpdateCloudWatchAlarmTemplateResponse: AWSDecodableShape {
        /// A cloudwatch alarm template's ARN (Amazon Resource Name)
        public let arn: String?
        public let comparisonOperator: CloudWatchAlarmTemplateComparisonOperator?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdAt: Date?
        /// The number of datapoints within the evaluation period that must be breaching to trigger the alarm.
        public let datapointsToAlarm: Int?
        /// A resource's optional description.
        public let description: String?
        /// The number of periods over which data is compared to the specified threshold.
        public let evaluationPeriods: Int?
        /// A cloudwatch alarm template group's id. AWS provided template groups have ids that start with `aws-`
        public let groupId: String?
        /// A cloudwatch alarm template's id. AWS provided templates have ids that start with `aws-`
        public let id: String?
        /// The name of the metric associated with the alarm. Must be compatible with targetResourceType.
        public let metricName: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var modifiedAt: Date?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        /// The period, in seconds, over which the specified statistic is applied.
        public let period: Int?
        public let statistic: CloudWatchAlarmTemplateStatistic?
        public let tags: [String: String]?
        public let targetResourceType: CloudWatchAlarmTemplateTargetResourceType?
        /// The threshold value to compare with the specified statistic.
        public let threshold: Double?
        public let treatMissingData: CloudWatchAlarmTemplateTreatMissingData?

        @inlinable
        public init(arn: String? = nil, comparisonOperator: CloudWatchAlarmTemplateComparisonOperator? = nil, createdAt: Date? = nil, datapointsToAlarm: Int? = nil, description: String? = nil, evaluationPeriods: Int? = nil, groupId: String? = nil, id: String? = nil, metricName: String? = nil, modifiedAt: Date? = nil, name: String? = nil, period: Int? = nil, statistic: CloudWatchAlarmTemplateStatistic? = nil, tags: [String: String]? = nil, targetResourceType: CloudWatchAlarmTemplateTargetResourceType? = nil, threshold: Double? = nil, treatMissingData: CloudWatchAlarmTemplateTreatMissingData? = nil) {
            self.arn = arn
            self.comparisonOperator = comparisonOperator
            self.createdAt = createdAt
            self.datapointsToAlarm = datapointsToAlarm
            self.description = description
            self.evaluationPeriods = evaluationPeriods
            self.groupId = groupId
            self.id = id
            self.metricName = metricName
            self.modifiedAt = modifiedAt
            self.name = name
            self.period = period
            self.statistic = statistic
            self.tags = tags
            self.targetResourceType = targetResourceType
            self.threshold = threshold
            self.treatMissingData = treatMissingData
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case comparisonOperator = "comparisonOperator"
            case createdAt = "createdAt"
            case datapointsToAlarm = "datapointsToAlarm"
            case description = "description"
            case evaluationPeriods = "evaluationPeriods"
            case groupId = "groupId"
            case id = "id"
            case metricName = "metricName"
            case modifiedAt = "modifiedAt"
            case name = "name"
            case period = "period"
            case statistic = "statistic"
            case tags = "tags"
            case targetResourceType = "targetResourceType"
            case threshold = "threshold"
            case treatMissingData = "treatMissingData"
        }
    }

    public struct UpdateClusterRequest: AWSEncodableShape {
        /// The ID of the cluster
        public let clusterId: String
        /// Include this parameter only if you want to change the current name of the Cluster. Specify a name that is unique in the AWS account. You can't change the name. Names are case-sensitive.
        public let name: String?
        /// Include this property only if you want to change the current connections between the Nodes in the Cluster and the Networks the Cluster is associated with.
        public let networkSettings: ClusterNetworkSettingsUpdateRequest?

        @inlinable
        public init(clusterId: String, name: String? = nil, networkSettings: ClusterNetworkSettingsUpdateRequest? = nil) {
            self.clusterId = clusterId
            self.name = name
            self.networkSettings = networkSettings
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.clusterId, key: "ClusterId")
            try container.encodeIfPresent(self.name, forKey: .name)
            try container.encodeIfPresent(self.networkSettings, forKey: .networkSettings)
        }

        private enum CodingKeys: String, CodingKey {
            case name = "name"
            case networkSettings = "networkSettings"
        }
    }

    public struct UpdateClusterResponse: AWSDecodableShape {
        /// The ARN of the Cluster.
        public let arn: String?
        /// An array of the IDs of the Channels that are associated with this Cluster. One Channel is associated with the Cluster as follows: A Channel belongs to a ChannelPlacementGroup. A ChannelPlacementGroup is attached to a Node. A Node belongs to a Cluster.
        public let channelIds: [String]?
        /// The hardware type for the Cluster
        public let clusterType: ClusterType?
        /// The unique ID of the Cluster.
        public let id: String?
        /// The user-specified name of the Cluster.
        public let name: String?
        /// Network settings that connect the Nodes in the Cluster to one or more of the Networks that the Cluster is associated with.
        public let networkSettings: ClusterNetworkSettings?
        /// The current state of the Cluster.
        public let state: ClusterState?

        @inlinable
        public init(arn: String? = nil, channelIds: [String]? = nil, clusterType: ClusterType? = nil, id: String? = nil, name: String? = nil, networkSettings: ClusterNetworkSettings? = nil, state: ClusterState? = nil) {
            self.arn = arn
            self.channelIds = channelIds
            self.clusterType = clusterType
            self.id = id
            self.name = name
            self.networkSettings = networkSettings
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case channelIds = "channelIds"
            case clusterType = "clusterType"
            case id = "id"
            case name = "name"
            case networkSettings = "networkSettings"
            case state = "state"
        }
    }

    public struct UpdateEventBridgeRuleTemplateGroupRequest: AWSEncodableShape {
        /// A resource's optional description.
        public let description: String?
        /// An eventbridge rule template group's identifier. Can be either be its id or current name.
        public let identifier: String

        @inlinable
        public init(description: String? = nil, identifier: String) {
            self.description = description
            self.identifier = identifier
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            try container.encodeIfPresent(self.description, forKey: .description)
            request.encodePath(self.identifier, key: "Identifier")
        }

        public func validate(name: String) throws {
            try self.validate(self.description, name: "description", parent: name, max: 1024)
        }

        private enum CodingKeys: String, CodingKey {
            case description = "description"
        }
    }

    public struct UpdateEventBridgeRuleTemplateGroupResponse: AWSDecodableShape {
        /// An eventbridge rule template group's ARN (Amazon Resource Name)
        public let arn: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdAt: Date?
        /// A resource's optional description.
        public let description: String?
        /// An eventbridge rule template group's id. AWS provided template groups have ids that start with `aws-`
        public let id: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var modifiedAt: Date?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        public let tags: [String: String]?

        @inlinable
        public init(arn: String? = nil, createdAt: Date? = nil, description: String? = nil, id: String? = nil, modifiedAt: Date? = nil, name: String? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.createdAt = createdAt
            self.description = description
            self.id = id
            self.modifiedAt = modifiedAt
            self.name = name
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case createdAt = "createdAt"
            case description = "description"
            case id = "id"
            case modifiedAt = "modifiedAt"
            case name = "name"
            case tags = "tags"
        }
    }

    public struct UpdateEventBridgeRuleTemplateRequest: AWSEncodableShape {
        /// A resource's optional description.
        public let description: String?
        public let eventTargets: [EventBridgeRuleTemplateTarget]?
        public let eventType: EventBridgeRuleTemplateEventType?
        /// An eventbridge rule template group's identifier. Can be either be its id or current name.
        public let groupIdentifier: String?
        /// An eventbridge rule template's identifier. Can be either be its id or current name.
        public let identifier: String
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?

        @inlinable
        public init(description: String? = nil, eventTargets: [EventBridgeRuleTemplateTarget]? = nil, eventType: EventBridgeRuleTemplateEventType? = nil, groupIdentifier: String? = nil, identifier: String, name: String? = nil) {
            self.description = description
            self.eventTargets = eventTargets
            self.eventType = eventType
            self.groupIdentifier = groupIdentifier
            self.identifier = identifier
            self.name = name
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            try container.encodeIfPresent(self.description, forKey: .description)
            try container.encodeIfPresent(self.eventTargets, forKey: .eventTargets)
            try container.encodeIfPresent(self.eventType, forKey: .eventType)
            try container.encodeIfPresent(self.groupIdentifier, forKey: .groupIdentifier)
            request.encodePath(self.identifier, key: "Identifier")
            try container.encodeIfPresent(self.name, forKey: .name)
        }

        public func validate(name: String) throws {
            try self.validate(self.description, name: "description", parent: name, max: 1024)
            try self.eventTargets?.forEach {
                try $0.validate(name: "\(name).eventTargets[]")
            }
            try self.validate(self.groupIdentifier, name: "groupIdentifier", parent: name, pattern: "^[^\\s]+$")
            try self.validate(self.name, name: "name", parent: name, max: 255)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[^\\s]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case description = "description"
            case eventTargets = "eventTargets"
            case eventType = "eventType"
            case groupIdentifier = "groupIdentifier"
            case name = "name"
        }
    }

    public struct UpdateEventBridgeRuleTemplateResponse: AWSDecodableShape {
        /// An eventbridge rule template's ARN (Amazon Resource Name)
        public let arn: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdAt: Date?
        /// A resource's optional description.
        public let description: String?
        public let eventTargets: [EventBridgeRuleTemplateTarget]?
        public let eventType: EventBridgeRuleTemplateEventType?
        /// An eventbridge rule template group's id. AWS provided template groups have ids that start with `aws-`
        public let groupId: String?
        /// An eventbridge rule template's id. AWS provided templates have ids that start with `aws-`
        public let id: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var modifiedAt: Date?
        /// A resource's name. Names must be unique within the scope of a resource type in a specific region.
        public let name: String?
        public let tags: [String: String]?

        @inlinable
        public init(arn: String? = nil, createdAt: Date? = nil, description: String? = nil, eventTargets: [EventBridgeRuleTemplateTarget]? = nil, eventType: EventBridgeRuleTemplateEventType? = nil, groupId: String? = nil, id: String? = nil, modifiedAt: Date? = nil, name: String? = nil, tags: [String: String]? = nil) {
            self.arn = arn
            self.createdAt = createdAt
            self.description = description
            self.eventTargets = eventTargets
            self.eventType = eventType
            self.groupId = groupId
            self.id = id
            self.modifiedAt = modifiedAt
            self.name = name
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case createdAt = "createdAt"
            case description = "description"
            case eventTargets = "eventTargets"
            case eventType = "eventType"
            case groupId = "groupId"
            case id = "id"
            case modifiedAt = "modifiedAt"
            case name = "name"
            case tags = "tags"
        }
    }

    public struct UpdateInputDeviceRequest: AWSEncodableShape {
        /// The Availability Zone you want associated with this input device.
        public let availabilityZone: String?
        /// The settings that you want to apply to the HD input device.
        public let hdDeviceSettings: InputDeviceConfigurableSettings?
        /// The unique ID of the input device. For example, hd-123456789abcdef.
        public let inputDeviceId: String
        /// The name that you assigned to this input device (not the unique ID).
        public let name: String?
        /// The settings that you want to apply to the UHD input device.
        public let uhdDeviceSettings: InputDeviceConfigurableSettings?

        @inlinable
        public init(availabilityZone: String? = nil, hdDeviceSettings: InputDeviceConfigurableSettings? = nil, inputDeviceId: String, name: String? = nil, uhdDeviceSettings: InputDeviceConfigurableSettings? = nil) {
            self.availabilityZone = availabilityZone
            self.hdDeviceSettings = hdDeviceSettings
            self.inputDeviceId = inputDeviceId
            self.name = name
            self.uhdDeviceSettings = uhdDeviceSettings
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            try container.encodeIfPresent(self.availabilityZone, forKey: .availabilityZone)
            try container.encodeIfPresent(self.hdDeviceSettings, forKey: .hdDeviceSettings)
            request.encodePath(self.inputDeviceId, key: "InputDeviceId")
            try container.encodeIfPresent(self.name, forKey: .name)
            try container.encodeIfPresent(self.uhdDeviceSettings, forKey: .uhdDeviceSettings)
        }

        private enum CodingKeys: String, CodingKey {
            case availabilityZone = "availabilityZone"
            case hdDeviceSettings = "hdDeviceSettings"
            case name = "name"
            case uhdDeviceSettings = "uhdDeviceSettings"
        }
    }

    public struct UpdateInputDeviceResponse: AWSDecodableShape {
        /// The unique ARN of the input device.
        public let arn: String?
        /// The Availability Zone associated with this input device.
        public let availabilityZone: String?
        /// The state of the connection between the input device and AWS.
        public let connectionState: InputDeviceConnectionState?
        /// The status of the action to synchronize the device configuration. If you change the configuration of the input device (for example, the maximum bitrate), MediaLive sends the new data to the device. The device might not update itself immediately. SYNCED means the device has updated its configuration. SYNCING means that it has not updated its configuration.
        public let deviceSettingsSyncState: DeviceSettingsSyncState?
        /// The status of software on the input device.
        public let deviceUpdateStatus: DeviceUpdateStatus?
        /// Settings that describe an input device that is type HD.
        public let hdDeviceSettings: InputDeviceHdSettings?
        /// The unique ID of the input device.
        public let id: String?
        /// The network MAC address of the input device.
        public let macAddress: String?
        /// An array of the ARNs for the MediaLive inputs attached to the device. Returned only if the outputType is MEDIALIVE_INPUT.
        public let medialiveInputArns: [String]?
        /// A name that you specify for the input device.
        public let name: String?
        /// The network settings for the input device.
        public let networkSettings: InputDeviceNetworkSettings?
        /// The output attachment type of the input device. Specifies MEDIACONNECT_FLOW if this device is the source for a MediaConnect flow. Specifies MEDIALIVE_INPUT if this device is the source for a MediaLive input.
        public let outputType: InputDeviceOutputType?
        /// The unique serial number of the input device.
        public let serialNumber: String?
        /// A collection of key-value pairs.
        public let tags: [String: String]?
        /// The type of the input device.
        public let type: InputDeviceType?
        /// Settings that describe an input device that is type UHD.
        public let uhdDeviceSettings: InputDeviceUhdSettings?

        @inlinable
        public init(arn: String? = nil, availabilityZone: String? = nil, connectionState: InputDeviceConnectionState? = nil, deviceSettingsSyncState: DeviceSettingsSyncState? = nil, deviceUpdateStatus: DeviceUpdateStatus? = nil, hdDeviceSettings: InputDeviceHdSettings? = nil, id: String? = nil, macAddress: String? = nil, medialiveInputArns: [String]? = nil, name: String? = nil, networkSettings: InputDeviceNetworkSettings? = nil, outputType: InputDeviceOutputType? = nil, serialNumber: String? = nil, tags: [String: String]? = nil, type: InputDeviceType? = nil, uhdDeviceSettings: InputDeviceUhdSettings? = nil) {
            self.arn = arn
            self.availabilityZone = availabilityZone
            self.connectionState = connectionState
            self.deviceSettingsSyncState = deviceSettingsSyncState
            self.deviceUpdateStatus = deviceUpdateStatus
            self.hdDeviceSettings = hdDeviceSettings
            self.id = id
            self.macAddress = macAddress
            self.medialiveInputArns = medialiveInputArns
            self.name = name
            self.networkSettings = networkSettings
            self.outputType = outputType
            self.serialNumber = serialNumber
            self.tags = tags
            self.type = type
            self.uhdDeviceSettings = uhdDeviceSettings
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case availabilityZone = "availabilityZone"
            case connectionState = "connectionState"
            case deviceSettingsSyncState = "deviceSettingsSyncState"
            case deviceUpdateStatus = "deviceUpdateStatus"
            case hdDeviceSettings = "hdDeviceSettings"
            case id = "id"
            case macAddress = "macAddress"
            case medialiveInputArns = "medialiveInputArns"
            case name = "name"
            case networkSettings = "networkSettings"
            case outputType = "outputType"
            case serialNumber = "serialNumber"
            case tags = "tags"
            case type = "type"
            case uhdDeviceSettings = "uhdDeviceSettings"
        }
    }

    public struct UpdateInputRequest: AWSEncodableShape {
        /// Destination settings for PUSH type inputs.
        public let destinations: [InputDestinationRequest]?
        /// Settings for the devices.
        public let inputDevices: [InputDeviceRequest]?
        /// Unique ID of the input.
        public let inputId: String
        /// A list of security groups referenced by IDs to attach to the input.
        public let inputSecurityGroups: [String]?
        /// A list of the MediaConnect Flow ARNs that you want to use as the source of the input. You can specify as few as one
        /// Flow and presently, as many as two. The only requirement is when you have more than one is that each Flow is in a
        /// separate Availability Zone as this ensures your EML input is redundant to AZ issues.
        public let mediaConnectFlows: [MediaConnectFlowRequest]?
        /// Multicast Input settings.
        public let multicastSettings: MulticastSettingsUpdateRequest?
        /// Name of the input.
        public let name: String?
        /// The Amazon Resource Name (ARN) of the role this input assumes during and after creation.
        public let roleArn: String?
        public let sdiSources: [String]?
        /// Include this parameter if the input is a SMPTE 2110 input, to identify the stream sources for this input.
        public let smpte2110ReceiverGroupSettings: Smpte2110ReceiverGroupSettings?
        /// The source URLs for a PULL-type input. Every PULL type input needs
        /// exactly two source URLs for redundancy.
        /// Only specify sources for PULL type Inputs. Leave Destinations empty.
        public let sources: [InputSourceRequest]?
        /// The settings associated with an SRT input.
        public let srtSettings: SrtSettingsRequest?

        @inlinable
        public init(destinations: [InputDestinationRequest]? = nil, inputDevices: [InputDeviceRequest]? = nil, inputId: String, inputSecurityGroups: [String]? = nil, mediaConnectFlows: [MediaConnectFlowRequest]? = nil, multicastSettings: MulticastSettingsUpdateRequest? = nil, name: String? = nil, roleArn: String? = nil, sdiSources: [String]? = nil, smpte2110ReceiverGroupSettings: Smpte2110ReceiverGroupSettings? = nil, sources: [InputSourceRequest]? = nil, srtSettings: SrtSettingsRequest? = nil) {
            self.destinations = destinations
            self.inputDevices = inputDevices
            self.inputId = inputId
            self.inputSecurityGroups = inputSecurityGroups
            self.mediaConnectFlows = mediaConnectFlows
            self.multicastSettings = multicastSettings
            self.name = name
            self.roleArn = roleArn
            self.sdiSources = sdiSources
            self.smpte2110ReceiverGroupSettings = smpte2110ReceiverGroupSettings
            self.sources = sources
            self.srtSettings = srtSettings
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            try container.encodeIfPresent(self.destinations, forKey: .destinations)
            try container.encodeIfPresent(self.inputDevices, forKey: .inputDevices)
            request.encodePath(self.inputId, key: "InputId")
            try container.encodeIfPresent(self.inputSecurityGroups, forKey: .inputSecurityGroups)
            try container.encodeIfPresent(self.mediaConnectFlows, forKey: .mediaConnectFlows)
            try container.encodeIfPresent(self.multicastSettings, forKey: .multicastSettings)
            try container.encodeIfPresent(self.name, forKey: .name)
            try container.encodeIfPresent(self.roleArn, forKey: .roleArn)
            try container.encodeIfPresent(self.sdiSources, forKey: .sdiSources)
            try container.encodeIfPresent(self.smpte2110ReceiverGroupSettings, forKey: .smpte2110ReceiverGroupSettings)
            try container.encodeIfPresent(self.sources, forKey: .sources)
            try container.encodeIfPresent(self.srtSettings, forKey: .srtSettings)
        }

        private enum CodingKeys: String, CodingKey {
            case destinations = "destinations"
            case inputDevices = "inputDevices"
            case inputSecurityGroups = "inputSecurityGroups"
            case mediaConnectFlows = "mediaConnectFlows"
            case multicastSettings = "multicastSettings"
            case name = "name"
            case roleArn = "roleArn"
            case sdiSources = "sdiSources"
            case smpte2110ReceiverGroupSettings = "smpte2110ReceiverGroupSettings"
            case sources = "sources"
            case srtSettings = "srtSettings"
        }
    }

    public struct UpdateInputResponse: AWSDecodableShape {
        public let input: Input?

        @inlinable
        public init(input: Input? = nil) {
            self.input = input
        }

        private enum CodingKeys: String, CodingKey {
            case input = "input"
        }
    }

    public struct UpdateInputSecurityGroupRequest: AWSEncodableShape {
        /// The id of the Input Security Group to update.
        public let inputSecurityGroupId: String
        /// A collection of key-value pairs.
        public let tags: [String: String]?
        /// List of IPv4 CIDR addresses to whitelist
        public let whitelistRules: [InputWhitelistRuleCidr]?

        @inlinable
        public init(inputSecurityGroupId: String, whitelistRules: [InputWhitelistRuleCidr]? = nil) {
            self.inputSecurityGroupId = inputSecurityGroupId
            self.tags = nil
            self.whitelistRules = whitelistRules
        }

        @available(*, deprecated, message: "Members tags have been deprecated")
        @inlinable
        public init(inputSecurityGroupId: String, tags: [String: String]? = nil, whitelistRules: [InputWhitelistRuleCidr]? = nil) {
            self.inputSecurityGroupId = inputSecurityGroupId
            self.tags = tags
            self.whitelistRules = whitelistRules
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.inputSecurityGroupId, key: "InputSecurityGroupId")
            try container.encodeIfPresent(self.tags, forKey: .tags)
            try container.encodeIfPresent(self.whitelistRules, forKey: .whitelistRules)
        }

        private enum CodingKeys: String, CodingKey {
            case tags = "tags"
            case whitelistRules = "whitelistRules"
        }
    }

    public struct UpdateInputSecurityGroupResponse: AWSDecodableShape {
        public let securityGroup: InputSecurityGroup?

        @inlinable
        public init(securityGroup: InputSecurityGroup? = nil) {
            self.securityGroup = securityGroup
        }

        private enum CodingKeys: String, CodingKey {
            case securityGroup = "securityGroup"
        }
    }

    public struct UpdateMultiplexProgramRequest: AWSEncodableShape {
        /// The ID of the multiplex of the program to update.
        public let multiplexId: String
        /// The new settings for a multiplex program.
        public let multiplexProgramSettings: MultiplexProgramSettings?
        /// The name of the program to update.
        public let programName: String

        @inlinable
        public init(multiplexId: String, multiplexProgramSettings: MultiplexProgramSettings? = nil, programName: String) {
            self.multiplexId = multiplexId
            self.multiplexProgramSettings = multiplexProgramSettings
            self.programName = programName
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.multiplexId, key: "MultiplexId")
            try container.encodeIfPresent(self.multiplexProgramSettings, forKey: .multiplexProgramSettings)
            request.encodePath(self.programName, key: "ProgramName")
        }

        public func validate(name: String) throws {
            try self.multiplexProgramSettings?.validate(name: "\(name).multiplexProgramSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case multiplexProgramSettings = "multiplexProgramSettings"
        }
    }

    public struct UpdateMultiplexProgramResponse: AWSDecodableShape {
        /// The updated multiplex program.
        public let multiplexProgram: MultiplexProgram?

        @inlinable
        public init(multiplexProgram: MultiplexProgram? = nil) {
            self.multiplexProgram = multiplexProgram
        }

        private enum CodingKeys: String, CodingKey {
            case multiplexProgram = "multiplexProgram"
        }
    }

    public struct UpdateMultiplexRequest: AWSEncodableShape {
        /// ID of the multiplex to update.
        public let multiplexId: String
        /// The new settings for a multiplex.
        public let multiplexSettings: MultiplexSettings?
        /// Name of the multiplex.
        public let name: String?
        public let packetIdentifiersMapping: [String: MultiplexProgramPacketIdentifiersMap]?

        @inlinable
        public init(multiplexId: String, multiplexSettings: MultiplexSettings? = nil, name: String? = nil, packetIdentifiersMapping: [String: MultiplexProgramPacketIdentifiersMap]? = nil) {
            self.multiplexId = multiplexId
            self.multiplexSettings = multiplexSettings
            self.name = name
            self.packetIdentifiersMapping = packetIdentifiersMapping
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.multiplexId, key: "MultiplexId")
            try container.encodeIfPresent(self.multiplexSettings, forKey: .multiplexSettings)
            try container.encodeIfPresent(self.name, forKey: .name)
            try container.encodeIfPresent(self.packetIdentifiersMapping, forKey: .packetIdentifiersMapping)
        }

        public func validate(name: String) throws {
            try self.multiplexSettings?.validate(name: "\(name).multiplexSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case multiplexSettings = "multiplexSettings"
            case name = "name"
            case packetIdentifiersMapping = "packetIdentifiersMapping"
        }
    }

    public struct UpdateMultiplexResponse: AWSDecodableShape {
        /// The updated multiplex.
        public let multiplex: Multiplex?

        @inlinable
        public init(multiplex: Multiplex? = nil) {
            self.multiplex = multiplex
        }

        private enum CodingKeys: String, CodingKey {
            case multiplex = "multiplex"
        }
    }

    public struct UpdateNetworkRequest: AWSEncodableShape {
        /// Include this parameter only if you want to change the pool of IP addresses in the network. An array of IpPoolCreateRequests that identify a collection of IP addresses in this network that you want to reserve for use in MediaLive Anywhere. MediaLive Anywhere uses these IP addresses for Push inputs (in both Bridge and NAT networks) and for output destinations (only in Bridge networks). Each IpPoolUpdateRequest specifies one CIDR block.
        public let ipPools: [IpPoolUpdateRequest]?
        /// Include this parameter only if you want to change the name of the Network. Specify a name that is unique in the AWS account. Names are case-sensitive.
        public let name: String?
        /// The ID of the network
        public let networkId: String
        /// Include this parameter only if you want to change or add routes in the Network. An array of Routes that MediaLive Anywhere needs to know about in order to route encoding traffic.
        public let routes: [RouteUpdateRequest]?

        @inlinable
        public init(ipPools: [IpPoolUpdateRequest]? = nil, name: String? = nil, networkId: String, routes: [RouteUpdateRequest]? = nil) {
            self.ipPools = ipPools
            self.name = name
            self.networkId = networkId
            self.routes = routes
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            try container.encodeIfPresent(self.ipPools, forKey: .ipPools)
            try container.encodeIfPresent(self.name, forKey: .name)
            request.encodePath(self.networkId, key: "NetworkId")
            try container.encodeIfPresent(self.routes, forKey: .routes)
        }

        private enum CodingKeys: String, CodingKey {
            case ipPools = "ipPools"
            case name = "name"
            case routes = "routes"
        }
    }

    public struct UpdateNetworkResponse: AWSDecodableShape {
        /// The ARN of this Network. It is automatically assigned when the Network is created.
        public let arn: String?
        public let associatedClusterIds: [String]?
        /// The ID of the Network. Unique in the AWS account. The ID is the resource-id portion of the ARN.
        public let id: String?
        /// An array of IpPools in your organization's network that identify a collection of IP addresses in this network that are reserved for use in MediaLive Anywhere. MediaLive Anywhere uses these IP addresses for Push inputs (in both Bridge and NAT networks) and for output destinations (only in Bridge networks). Each IpPool specifies one CIDR block.
        public let ipPools: [IpPool]?
        /// The name that you specified for the Network.
        public let name: String?
        /// An array of Routes that MediaLive Anywhere needs to know about in order to route encoding traffic.
        public let routes: [Route]?
        /// The current state of the Network. Only MediaLive Anywhere can change the state.
        public let state: NetworkState?

        @inlinable
        public init(arn: String? = nil, associatedClusterIds: [String]? = nil, id: String? = nil, ipPools: [IpPool]? = nil, name: String? = nil, routes: [Route]? = nil, state: NetworkState? = nil) {
            self.arn = arn
            self.associatedClusterIds = associatedClusterIds
            self.id = id
            self.ipPools = ipPools
            self.name = name
            self.routes = routes
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case associatedClusterIds = "associatedClusterIds"
            case id = "id"
            case ipPools = "ipPools"
            case name = "name"
            case routes = "routes"
            case state = "state"
        }
    }

    public struct UpdateNodeRequest: AWSEncodableShape {
        /// The ID of the cluster
        public let clusterId: String
        /// Include this parameter only if you want to change the current name of the Node. Specify a name that is unique in the Cluster. You can't change the name. Names are case-sensitive.
        public let name: String?
        /// The ID of the node.
        public let nodeId: String
        /// The initial role of the Node in the Cluster. ACTIVE means the Node is available for encoding. BACKUP means the Node is a redundant Node and might get used if an ACTIVE Node fails.
        public let role: NodeRole?
        /// The mappings of a SDI capture card port to a logical SDI data stream
        public let sdiSourceMappings: [SdiSourceMappingUpdateRequest]?

        @inlinable
        public init(clusterId: String, name: String? = nil, nodeId: String, role: NodeRole? = nil, sdiSourceMappings: [SdiSourceMappingUpdateRequest]? = nil) {
            self.clusterId = clusterId
            self.name = name
            self.nodeId = nodeId
            self.role = role
            self.sdiSourceMappings = sdiSourceMappings
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.clusterId, key: "ClusterId")
            try container.encodeIfPresent(self.name, forKey: .name)
            request.encodePath(self.nodeId, key: "NodeId")
            try container.encodeIfPresent(self.role, forKey: .role)
            try container.encodeIfPresent(self.sdiSourceMappings, forKey: .sdiSourceMappings)
        }

        private enum CodingKeys: String, CodingKey {
            case name = "name"
            case role = "role"
            case sdiSourceMappings = "sdiSourceMappings"
        }
    }

    public struct UpdateNodeResponse: AWSDecodableShape {
        /// The ARN of the Node. It is automatically assigned when the Node is created.
        public let arn: String?
        /// An array of IDs. Each ID is one ChannelPlacementGroup that is associated with this Node. Empty if the Node is not yet associated with any groups.
        public let channelPlacementGroups: [String]?
        /// The ID of the Cluster that the Node belongs to.
        public let clusterId: String?
        /// The current connection state of the Node.
        public let connectionState: NodeConnectionState?
        /// The unique ID of the Node. Unique in the Cluster. The ID is the resource-id portion of the ARN.
        public let id: String?
        /// The ARN of the EC2 instance hosting the Node.
        public let instanceArn: String?
        /// The name that you specified for the Node.
        public let name: String?
        /// Documentation update needed
        public let nodeInterfaceMappings: [NodeInterfaceMapping]?
        /// The initial role current role of the Node in the Cluster. ACTIVE means the Node is available for encoding. BACKUP means the Node is a redundant Node and might get used if an ACTIVE Node fails.
        public let role: NodeRole?
        /// An array of SDI source mappings. Each mapping connects one logical SdiSource to the physical SDI card and port that the physical SDI source uses.
        public let sdiSourceMappings: [SdiSourceMapping]?
        /// The current state of the Node.
        public let state: NodeState?

        @inlinable
        public init(arn: String? = nil, channelPlacementGroups: [String]? = nil, clusterId: String? = nil, connectionState: NodeConnectionState? = nil, id: String? = nil, instanceArn: String? = nil, name: String? = nil, nodeInterfaceMappings: [NodeInterfaceMapping]? = nil, role: NodeRole? = nil, sdiSourceMappings: [SdiSourceMapping]? = nil, state: NodeState? = nil) {
            self.arn = arn
            self.channelPlacementGroups = channelPlacementGroups
            self.clusterId = clusterId
            self.connectionState = connectionState
            self.id = id
            self.instanceArn = instanceArn
            self.name = name
            self.nodeInterfaceMappings = nodeInterfaceMappings
            self.role = role
            self.sdiSourceMappings = sdiSourceMappings
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case channelPlacementGroups = "channelPlacementGroups"
            case clusterId = "clusterId"
            case connectionState = "connectionState"
            case id = "id"
            case instanceArn = "instanceArn"
            case name = "name"
            case nodeInterfaceMappings = "nodeInterfaceMappings"
            case role = "role"
            case sdiSourceMappings = "sdiSourceMappings"
            case state = "state"
        }
    }

    public struct UpdateNodeStateRequest: AWSEncodableShape {
        /// The ID of the cluster
        public let clusterId: String
        /// The ID of the node.
        public let nodeId: String
        /// The state to apply to the Node. Set to ACTIVE (COMMISSIONED) to indicate that the Node is deployable. MediaLive Anywhere will consider this node it needs a Node to run a Channel on, or when it needs a Node to promote from a backup node to an active node. Set to DRAINING to isolate the Node so that MediaLive Anywhere won't use it.
        public let state: UpdateNodeStateShape?

        @inlinable
        public init(clusterId: String, nodeId: String, state: UpdateNodeStateShape? = nil) {
            self.clusterId = clusterId
            self.nodeId = nodeId
            self.state = state
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            request.encodePath(self.clusterId, key: "ClusterId")
            request.encodePath(self.nodeId, key: "NodeId")
            try container.encodeIfPresent(self.state, forKey: .state)
        }

        private enum CodingKeys: String, CodingKey {
            case state = "state"
        }
    }

    public struct UpdateNodeStateResponse: AWSDecodableShape {
        /// The ARN of the Node. It is automatically assigned when the Node is created.
        public let arn: String?
        /// An array of IDs. Each ID is one ChannelPlacementGroup that is associated with this Node. Empty if the Node is not yet associated with any groups.
        public let channelPlacementGroups: [String]?
        /// The ID of the Cluster that the Node belongs to.
        public let clusterId: String?
        /// The current connection state of the Node.
        public let connectionState: NodeConnectionState?
        /// The unique ID of the Node. Unique in the Cluster. The ID is the resource-id portion of the ARN.
        public let id: String?
        /// The ARN of the EC2 instance hosting the Node.
        public let instanceArn: String?
        /// The name that you specified for the Node.
        public let name: String?
        /// Documentation update needed
        public let nodeInterfaceMappings: [NodeInterfaceMapping]?
        /// The initial role current role of the Node in the Cluster. ACTIVE means the Node is available for encoding. BACKUP means the Node is a redundant Node and might get used if an ACTIVE Node fails.
        public let role: NodeRole?
        /// An array of SDI source mappings. Each mapping connects one logical SdiSource to the physical SDI card and port that the physical SDI source uses.
        public let sdiSourceMappings: [SdiSourceMapping]?
        /// The current state of the Node.
        public let state: NodeState?

        @inlinable
        public init(arn: String? = nil, channelPlacementGroups: [String]? = nil, clusterId: String? = nil, connectionState: NodeConnectionState? = nil, id: String? = nil, instanceArn: String? = nil, name: String? = nil, nodeInterfaceMappings: [NodeInterfaceMapping]? = nil, role: NodeRole? = nil, sdiSourceMappings: [SdiSourceMapping]? = nil, state: NodeState? = nil) {
            self.arn = arn
            self.channelPlacementGroups = channelPlacementGroups
            self.clusterId = clusterId
            self.connectionState = connectionState
            self.id = id
            self.instanceArn = instanceArn
            self.name = name
            self.nodeInterfaceMappings = nodeInterfaceMappings
            self.role = role
            self.sdiSourceMappings = sdiSourceMappings
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "arn"
            case channelPlacementGroups = "channelPlacementGroups"
            case clusterId = "clusterId"
            case connectionState = "connectionState"
            case id = "id"
            case instanceArn = "instanceArn"
            case name = "name"
            case nodeInterfaceMappings = "nodeInterfaceMappings"
            case role = "role"
            case sdiSourceMappings = "sdiSourceMappings"
            case state = "state"
        }
    }

    public struct UpdateReservationRequest: AWSEncodableShape {
        /// Name of the reservation
        public let name: String?
        /// Renewal settings for the reservation
        public let renewalSettings: RenewalSettings?
        /// Unique reservation ID, e.g. '1234567'
        public let reservationId: String

        @inlinable
        public init(name: String? = nil, renewalSettings: RenewalSettings? = nil, reservationId: String) {
            self.name = name
            self.renewalSettings = renewalSettings
            self.reservationId = reservationId
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            try container.encodeIfPresent(self.name, forKey: .name)
            try container.encodeIfPresent(self.renewalSettings, forKey: .renewalSettings)
            request.encodePath(self.reservationId, key: "ReservationId")
        }

        public func validate(name: String) throws {
            try self.renewalSettings?.validate(name: "\(name).renewalSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case name = "name"
            case renewalSettings = "renewalSettings"
        }
    }

    public struct UpdateReservationResponse: AWSDecodableShape {
        public let reservation: Reservation?

        @inlinable
        public init(reservation: Reservation? = nil) {
            self.reservation = reservation
        }

        private enum CodingKeys: String, CodingKey {
            case reservation = "reservation"
        }
    }

    public struct UpdateSdiSourceRequest: AWSEncodableShape {
        /// Include this parameter only if you want to change the name of the SdiSource. Specify a name that is unique in the AWS account. We recommend you assign a name that describes the source, for example curling-cameraA. Names are case-sensitive.
        public let mode: SdiSourceMode?
        /// Include this parameter only if you want to change the name of the SdiSource. Specify a name that is unique in the AWS account. We recommend you assign a name that describes the source, for example curling-cameraA. Names are case-sensitive.
        public let name: String?
        /// The ID of the SdiSource
        public let sdiSourceId: String
        /// Include this parameter only if you want to change the mode. Specify the type of the SDI source: SINGLE: The source is a single-link source. QUAD: The source is one part of a quad-link source.
        public let type: SdiSourceType?

        @inlinable
        public init(mode: SdiSourceMode? = nil, name: String? = nil, sdiSourceId: String, type: SdiSourceType? = nil) {
            self.mode = mode
            self.name = name
            self.sdiSourceId = sdiSourceId
            self.type = type
        }

        public func encode(to encoder: Encoder) throws {
            let request = encoder.userInfo[.awsRequest]! as! RequestEncodingContainer
            var container = encoder.container(keyedBy: CodingKeys.self)
            try container.encodeIfPresent(self.mode, forKey: .mode)
            try container.encodeIfPresent(self.name, forKey: .name)
            request.encodePath(self.sdiSourceId, key: "SdiSourceId")
            try container.encodeIfPresent(self.type, forKey: .type)
        }

        private enum CodingKeys: String, CodingKey {
            case mode = "mode"
            case name = "name"
            case type = "type"
        }
    }

    public struct UpdateSdiSourceResponse: AWSDecodableShape {
        /// Settings for the SDI source.
        public let sdiSource: SdiSource?

        @inlinable
        public init(sdiSource: SdiSource? = nil) {
            self.sdiSource = sdiSource
        }

        private enum CodingKeys: String, CodingKey {
            case sdiSource = "sdiSource"
        }
    }

    public struct ValidationError: AWSDecodableShape {
        /// Path to the source of the error.
        public let elementPath: String?
        /// The error message.
        public let errorMessage: String?

        @inlinable
        public init(elementPath: String? = nil, errorMessage: String? = nil) {
            self.elementPath = elementPath
            self.errorMessage = errorMessage
        }

        private enum CodingKeys: String, CodingKey {
            case elementPath = "elementPath"
            case errorMessage = "errorMessage"
        }
    }

    public struct VideoBlackFailoverSettings: AWSEncodableShape & AWSDecodableShape {
        /// A value used in calculating the threshold below which MediaLive considers a pixel to be 'black'. For the input to be considered black, every pixel in a frame must be below this threshold. The threshold is calculated as a percentage (expressed as a decimal) of white. Therefore .1 means 10% white (or 90% black). Note how the formula works for any color depth. For example, if you set this field to 0.1 in 10-bit color depth: (1023*0.1=102.3), which means a pixel value of 102 or less is 'black'. If you set this field to .1 in an 8-bit color depth: (255*0.1=25.5), which means a pixel value of 25 or less is 'black'. The range is 0.0 to 1.0, with any number of decimal places.
        public let blackDetectThreshold: Double?
        /// The amount of time (in milliseconds) that the active input must be black before automatic input failover occurs.
        public let videoBlackThresholdMsec: Int?

        @inlinable
        public init(blackDetectThreshold: Double? = nil, videoBlackThresholdMsec: Int? = nil) {
            self.blackDetectThreshold = blackDetectThreshold
            self.videoBlackThresholdMsec = videoBlackThresholdMsec
        }

        public func validate(name: String) throws {
            try self.validate(self.videoBlackThresholdMsec, name: "videoBlackThresholdMsec", parent: name, min: 1000)
        }

        private enum CodingKeys: String, CodingKey {
            case blackDetectThreshold = "blackDetectThreshold"
            case videoBlackThresholdMsec = "videoBlackThresholdMsec"
        }
    }

    public struct VideoCodecSettings: AWSEncodableShape & AWSDecodableShape {
        public let av1Settings: Av1Settings?
        public let frameCaptureSettings: FrameCaptureSettings?
        public let h264Settings: H264Settings?
        public let h265Settings: H265Settings?
        public let mpeg2Settings: Mpeg2Settings?

        @inlinable
        public init(av1Settings: Av1Settings? = nil, frameCaptureSettings: FrameCaptureSettings? = nil, h264Settings: H264Settings? = nil, h265Settings: H265Settings? = nil, mpeg2Settings: Mpeg2Settings? = nil) {
            self.av1Settings = av1Settings
            self.frameCaptureSettings = frameCaptureSettings
            self.h264Settings = h264Settings
            self.h265Settings = h265Settings
            self.mpeg2Settings = mpeg2Settings
        }

        public func validate(name: String) throws {
            try self.av1Settings?.validate(name: "\(name).av1Settings")
            try self.frameCaptureSettings?.validate(name: "\(name).frameCaptureSettings")
            try self.h264Settings?.validate(name: "\(name).h264Settings")
            try self.h265Settings?.validate(name: "\(name).h265Settings")
            try self.mpeg2Settings?.validate(name: "\(name).mpeg2Settings")
        }

        private enum CodingKeys: String, CodingKey {
            case av1Settings = "av1Settings"
            case frameCaptureSettings = "frameCaptureSettings"
            case h264Settings = "h264Settings"
            case h265Settings = "h265Settings"
            case mpeg2Settings = "mpeg2Settings"
        }
    }

    public struct VideoDescription: AWSEncodableShape & AWSDecodableShape {
        /// Video codec settings.
        public let codecSettings: VideoCodecSettings?
        /// Output video height, in pixels. Must be an even number. For most codecs, you can leave this field and width blank in order to use the height and width (resolution) from the source. Note, however, that leaving blank is not recommended. For the Frame Capture codec, height and width are required.
        public let height: Int?
        /// The name of this VideoDescription. Outputs will use this name to uniquely identify this Description.  Description names should be unique within this Live Event.
        public let name: String?
        /// Indicates how MediaLive will respond to the AFD values that might be in the input video. If you do not know what AFD signaling is, or if your downstream system has not given you guidance, choose PASSTHROUGH.
        /// RESPOND: MediaLive clips the input video using a formula that uses the AFD values (configured in afdSignaling ), the input display aspect ratio, and the output display aspect ratio. MediaLive also includes the AFD values in the output, unless the codec for this encode is FRAME_CAPTURE.
        /// PASSTHROUGH: MediaLive ignores the AFD values and does not clip the video. But MediaLive does include the values in the output.
        /// NONE: MediaLive does not clip the input video and does not include the AFD values in the output
        public let respondToAfd: VideoDescriptionRespondToAfd?
        /// STRETCH_TO_OUTPUT configures the output position to stretch the video to the specified output resolution (height and width). This option will override any position value. DEFAULT may insert black boxes (pillar boxes or letter boxes) around the video to provide the specified output resolution.
        public let scalingBehavior: VideoDescriptionScalingBehavior?
        /// Changes the strength of the anti-alias filter used for scaling. 0 is the softest setting, 100 is the sharpest. A setting of 50 is recommended for most content.
        public let sharpness: Int?
        /// Output video width, in pixels. Must be an even number. For most codecs, you can leave this field and height blank in order to use the height and width (resolution) from the source. Note, however, that leaving blank is not recommended. For the Frame Capture codec, height and width are required.
        public let width: Int?

        @inlinable
        public init(codecSettings: VideoCodecSettings? = nil, height: Int? = nil, name: String? = nil, respondToAfd: VideoDescriptionRespondToAfd? = nil, scalingBehavior: VideoDescriptionScalingBehavior? = nil, sharpness: Int? = nil, width: Int? = nil) {
            self.codecSettings = codecSettings
            self.height = height
            self.name = name
            self.respondToAfd = respondToAfd
            self.scalingBehavior = scalingBehavior
            self.sharpness = sharpness
            self.width = width
        }

        public func validate(name: String) throws {
            try self.codecSettings?.validate(name: "\(name).codecSettings")
            try self.validate(self.sharpness, name: "sharpness", parent: name, max: 100)
            try self.validate(self.sharpness, name: "sharpness", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case codecSettings = "codecSettings"
            case height = "height"
            case name = "name"
            case respondToAfd = "respondToAfd"
            case scalingBehavior = "scalingBehavior"
            case sharpness = "sharpness"
            case width = "width"
        }
    }

    public struct VideoSelector: AWSEncodableShape & AWSDecodableShape {
        /// Controls how MediaLive will use the color space metadata from the source. Typically, choose FOLLOW, which means to use the color space metadata without changing it. Or choose another value (a standard). In this case, the handling is controlled by the colorspaceUsage property.
        public let colorSpace: VideoSelectorColorSpace?
        /// Choose HDR10 only if the following situation applies. Firstly, you specified HDR10 in ColorSpace. Secondly, the attached input is for AWS Elemental Link. Thirdly, you plan to convert the content to another color space. You need to specify the color space metadata that is missing from the source sent from AWS Elemental Link.
        public let colorSpaceSettings: VideoSelectorColorSpaceSettings?
        /// Applies only if colorSpace is a value other than follow. This field controls how the value in the colorSpace field will be used. fallback means that when the input does include color space data, that data will be used, but when the input has no color space data, the value in colorSpace will be used. Choose fallback if your input is sometimes missing color space data, but when it does have color space data, that data is correct. force means to always use the value in colorSpace. Choose force if your input usually has no color space data or might have unreliable color space data.
        public let colorSpaceUsage: VideoSelectorColorSpaceUsage?
        /// The video selector settings.
        public let selectorSettings: VideoSelectorSettings?

        @inlinable
        public init(colorSpace: VideoSelectorColorSpace? = nil, colorSpaceSettings: VideoSelectorColorSpaceSettings? = nil, colorSpaceUsage: VideoSelectorColorSpaceUsage? = nil, selectorSettings: VideoSelectorSettings? = nil) {
            self.colorSpace = colorSpace
            self.colorSpaceSettings = colorSpaceSettings
            self.colorSpaceUsage = colorSpaceUsage
            self.selectorSettings = selectorSettings
        }

        public func validate(name: String) throws {
            try self.colorSpaceSettings?.validate(name: "\(name).colorSpaceSettings")
            try self.selectorSettings?.validate(name: "\(name).selectorSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case colorSpace = "colorSpace"
            case colorSpaceSettings = "colorSpaceSettings"
            case colorSpaceUsage = "colorSpaceUsage"
            case selectorSettings = "selectorSettings"
        }
    }

    public struct VideoSelectorColorSpaceSettings: AWSEncodableShape & AWSDecodableShape {
        public let hdr10Settings: Hdr10Settings?

        @inlinable
        public init(hdr10Settings: Hdr10Settings? = nil) {
            self.hdr10Settings = hdr10Settings
        }

        public func validate(name: String) throws {
            try self.hdr10Settings?.validate(name: "\(name).hdr10Settings")
        }

        private enum CodingKeys: String, CodingKey {
            case hdr10Settings = "hdr10Settings"
        }
    }

    public struct VideoSelectorPid: AWSEncodableShape & AWSDecodableShape {
        /// Selects a specific PID from within a video source.
        public let pid: Int?

        @inlinable
        public init(pid: Int? = nil) {
            self.pid = pid
        }

        public func validate(name: String) throws {
            try self.validate(self.pid, name: "pid", parent: name, max: 8191)
            try self.validate(self.pid, name: "pid", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case pid = "pid"
        }
    }

    public struct VideoSelectorProgramId: AWSEncodableShape & AWSDecodableShape {
        /// Selects a specific program from within a multi-program transport stream. If the program doesn't exist, the first program within the transport stream will be selected by default.
        public let programId: Int?

        @inlinable
        public init(programId: Int? = nil) {
            self.programId = programId
        }

        public func validate(name: String) throws {
            try self.validate(self.programId, name: "programId", parent: name, max: 65536)
            try self.validate(self.programId, name: "programId", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case programId = "programId"
        }
    }

    public struct VideoSelectorSettings: AWSEncodableShape & AWSDecodableShape {
        public let videoSelectorPid: VideoSelectorPid?
        public let videoSelectorProgramId: VideoSelectorProgramId?

        @inlinable
        public init(videoSelectorPid: VideoSelectorPid? = nil, videoSelectorProgramId: VideoSelectorProgramId? = nil) {
            self.videoSelectorPid = videoSelectorPid
            self.videoSelectorProgramId = videoSelectorProgramId
        }

        public func validate(name: String) throws {
            try self.videoSelectorPid?.validate(name: "\(name).videoSelectorPid")
            try self.videoSelectorProgramId?.validate(name: "\(name).videoSelectorProgramId")
        }

        private enum CodingKeys: String, CodingKey {
            case videoSelectorPid = "videoSelectorPid"
            case videoSelectorProgramId = "videoSelectorProgramId"
        }
    }

    public struct VpcOutputSettings: AWSEncodableShape {
        /// List of public address allocation ids to associate with ENIs that will be created in Output VPC.
        /// Must specify one for SINGLE_PIPELINE, two for STANDARD channels
        public let publicAddressAllocationIds: [String]?
        /// A list of up to 5 EC2 VPC security group IDs to attach to the Output VPC network interfaces.
        /// If none are specified then the VPC default security group will be used
        public let securityGroupIds: [String]?
        /// A list of VPC subnet IDs from the same VPC.
        /// If STANDARD channel, subnet IDs must be mapped to two unique availability zones (AZ).
        public let subnetIds: [String]?

        @inlinable
        public init(publicAddressAllocationIds: [String]? = nil, securityGroupIds: [String]? = nil, subnetIds: [String]? = nil) {
            self.publicAddressAllocationIds = publicAddressAllocationIds
            self.securityGroupIds = securityGroupIds
            self.subnetIds = subnetIds
        }

        private enum CodingKeys: String, CodingKey {
            case publicAddressAllocationIds = "publicAddressAllocationIds"
            case securityGroupIds = "securityGroupIds"
            case subnetIds = "subnetIds"
        }
    }

    public struct VpcOutputSettingsDescription: AWSDecodableShape {
        /// The Availability Zones where the vpc subnets are located.
        /// The first Availability Zone applies to the first subnet in the list of subnets.
        /// The second Availability Zone applies to the second subnet.
        public let availabilityZones: [String]?
        /// A list of Elastic Network Interfaces created by MediaLive in the customer's VPC
        public let networkInterfaceIds: [String]?
        /// A list of up EC2 VPC security group IDs attached to the Output VPC network interfaces.
        public let securityGroupIds: [String]?
        /// A list of VPC subnet IDs from the same VPC.
        /// If STANDARD channel, subnet IDs must be mapped to two unique availability zones (AZ).
        public let subnetIds: [String]?

        @inlinable
        public init(availabilityZones: [String]? = nil, networkInterfaceIds: [String]? = nil, securityGroupIds: [String]? = nil, subnetIds: [String]? = nil) {
            self.availabilityZones = availabilityZones
            self.networkInterfaceIds = networkInterfaceIds
            self.securityGroupIds = securityGroupIds
            self.subnetIds = subnetIds
        }

        private enum CodingKeys: String, CodingKey {
            case availabilityZones = "availabilityZones"
            case networkInterfaceIds = "networkInterfaceIds"
            case securityGroupIds = "securityGroupIds"
            case subnetIds = "subnetIds"
        }
    }

    public struct WavSettings: AWSEncodableShape & AWSDecodableShape {
        /// Bits per sample.
        public let bitDepth: Double?
        /// The audio coding mode for the WAV audio. The mode determines the number of channels in the audio.
        public let codingMode: WavCodingMode?
        /// Sample rate in Hz.
        public let sampleRate: Double?

        @inlinable
        public init(bitDepth: Double? = nil, codingMode: WavCodingMode? = nil, sampleRate: Double? = nil) {
            self.bitDepth = bitDepth
            self.codingMode = codingMode
            self.sampleRate = sampleRate
        }

        private enum CodingKeys: String, CodingKey {
            case bitDepth = "bitDepth"
            case codingMode = "codingMode"
            case sampleRate = "sampleRate"
        }
    }

    public struct WebvttDestinationSettings: AWSEncodableShape & AWSDecodableShape {
        /// Controls whether the color and position of the source captions is passed through to the WebVTT output captions.  PASSTHROUGH - Valid only if the source captions are EMBEDDED or TELETEXT.  NO_STYLE_DATA - Don't pass through the style. The output captions will not contain any font styling information.
        public let styleControl: WebvttDestinationStyleControl?

        @inlinable
        public init(styleControl: WebvttDestinationStyleControl? = nil) {
            self.styleControl = styleControl
        }

        private enum CodingKeys: String, CodingKey {
            case styleControl = "styleControl"
        }
    }
}

// MARK: - Errors

/// Error enum for MediaLive
public struct MediaLiveErrorType: AWSErrorType {
    enum Code: String {
        case badGatewayException = "BadGatewayException"
        case badRequestException = "BadRequestException"
        case conflictException = "ConflictException"
        case forbiddenException = "ForbiddenException"
        case gatewayTimeoutException = "GatewayTimeoutException"
        case internalServerErrorException = "InternalServerErrorException"
        case notFoundException = "NotFoundException"
        case tooManyRequestsException = "TooManyRequestsException"
        case unprocessableEntityException = "UnprocessableEntityException"
    }

    private let error: Code
    public let context: AWSErrorContext?

    /// initialize MediaLive
    public init?(errorCode: String, context: AWSErrorContext) {
        guard let error = Code(rawValue: errorCode) else { return nil }
        self.error = error
        self.context = context
    }

    internal init(_ error: Code) {
        self.error = error
        self.context = nil
    }

    /// return error code string
    public var errorCode: String { self.error.rawValue }

    /// Placeholder documentation for BadGatewayException
    public static var badGatewayException: Self { .init(.badGatewayException) }
    /// Placeholder documentation for BadRequestException
    public static var badRequestException: Self { .init(.badRequestException) }
    /// Placeholder documentation for ConflictException
    public static var conflictException: Self { .init(.conflictException) }
    /// Placeholder documentation for ForbiddenException
    public static var forbiddenException: Self { .init(.forbiddenException) }
    /// Placeholder documentation for GatewayTimeoutException
    public static var gatewayTimeoutException: Self { .init(.gatewayTimeoutException) }
    /// Placeholder documentation for InternalServerErrorException
    public static var internalServerErrorException: Self { .init(.internalServerErrorException) }
    /// Placeholder documentation for NotFoundException
    public static var notFoundException: Self { .init(.notFoundException) }
    /// Placeholder documentation for TooManyRequestsException
    public static var tooManyRequestsException: Self { .init(.tooManyRequestsException) }
    /// Placeholder documentation for UnprocessableEntityException
    public static var unprocessableEntityException: Self { .init(.unprocessableEntityException) }
}

extension MediaLiveErrorType: AWSServiceErrorType {
    public static let errorCodeMap: [String: AWSErrorShape.Type] = [
        "UnprocessableEntityException": MediaLive.UnprocessableEntityException.self
    ]
}

extension MediaLiveErrorType: Equatable {
    public static func == (lhs: MediaLiveErrorType, rhs: MediaLiveErrorType) -> Bool {
        lhs.error == rhs.error
    }
}

extension MediaLiveErrorType: CustomStringConvertible {
    public var description: String {
        return "\(self.error.rawValue): \(self.message ?? "")"
    }
}
